반응형
✔ Java 11
✔ Gradle 7
✔ Spring boot 2.6.3
2. 게시글 추가 기능
- Issues #40
- Pull request #51 - 풀 리퀘스트 링크를 통해 해당 코드를 확인할 수 있습니다.
1. PostController
@PostMapping("/{userpk}")
public void createPost(@PathVariable(name = "userpk") @Valid long userPk, @RequestBody @Valid CreatePostRequestDto createPostRequestDto) {
boardMinjService.createPost(userPk, createPostRequestDto);
}
@PostMapping("/{userpk}")
- user 엔티티가 post 엔티티의 FK이다. 그래서 누구의 글인지 알기 위해 user PK를 변수로 받는다.
@PathVariable(name = "userpk") @Valid long userPk
- 변수의 값을 파라미터로 받을 때 사용하는 어노테이션이다. name으로 변수명을 받을 수 있고, 파라미터에서는 따로 이름을 작성할 수 있다.
- 도메인은 대소문자를 구분하지 않아 경로 변수는 모두 소문자로, 자바 변수는 카멜 케이스를 사용하여 변수명을 나타냈다.
@RequestBody @Valid CreatePostRequestDto createPostRequestDto
- 해당 어노테이션으로 JSON body를 받을 수 있다.
2. Request DTO
게시글 추가 메소드에서 body로 받을 Request DTO이다.
@Getter
@AllArgsConstructor
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class CreatePostRequestDto {
@NotNull
private String title;
@NotNull
private String content;
}
@AllArgsConstructor
- 모든 필드에 대한 생성자를 자동으로 생성해주는 어노테이션
@NoArgsConstructor(access = AccessLevel.PROTECTED)
- 매개변수가 없는 생성자를 자도으로 생성해주는 어노테이션
- DTO에서는 필수로 있어야하는 생성자(어노테이션)이다.
✔ 클래스 이름이나 메소드 이름은 해당 클래스/메소드가 어떤 기능을 수행하는지를 알 수 있도록 작성해주는 것이 좋다.
✔ DTO의 경우 API 명세서 작성할 때의 양식대로 작성해야 해당 API를 사용하는 사람들이 헷갈리지 않고 사용할 수 있다.
3. PostService
public void createPost(long userPk, CreatePostRequestDto createPostRequestDto) {
UserMinj userMinj = userMinjRepository.findById(userPk).orElseThrow(() -> {
throw new ApiExceptionMinJ(ErrorCodeEnum.USER_NOT_FOUND);
});
PostMinj postMinj = PostMinj.createPost(createPostRequestDto.getTitle(), createPostRequestDto.getContent(), userMinj);
postRepository.save(postMinj);
}
경로 변수로 받은 user PK가 존재하는 아이디인지 확인한다.
- 존재할 경우 해당 User를 변수로 저장한다.
- 존재하지 않을 경우 예외를 발생한다. (404 반환)
- Post 엔티티에 엔티티를 생성하는 createPost 메소드로 엔티티를 생성한다.
- Post 엔티티는 User 엔티티를 FK로 설정해두었다.
- 리포지토리 내장 메소드인 save() 메소드를 사용하여 엔티티를 저장한다.
entity > Post.java
public static PostMinj createPost(String title, String content, UserMinj userMinj) {
PostMinj postMinj = new PostMinj();
postMinj.postTitle = title;
postMinj.postContent = content;
postMinj.userMinj = userMinj;
return postMinj;
}
엔티티를 생성하는 메소드를 구현한다.
실행 결과
- 디비 조회
반응형
'Study > Spring' 카테고리의 다른 글
@Query로 update문 작성하기 | Spring Spring boot JPA 쿼리 어노테이션 (0) | 2022.04.27 |
---|---|
User 엔티티를 외래키로 가진 Post 엔티티 조회하기 | Spring Spring boot JPA Study (0) | 2022.02.16 |
JPA Auditing 사용하여 엔티티 설계하기 | Spring Spring boot JPA Study (0) | 2022.02.15 |
Controller 통합 테스트 코드 | Spring Spring boot JPA Study (0) | 2022.02.12 |
[Spring | test | H2] test에서 H2 DB 연결하기 (0) | 2022.02.12 |
댓글