μν°ν°μμ setterλ₯Ό μ¬μ©νλ κ²½μ° μ¬μ©ν μλλ₯Ό μ½κ² νμ νκΈ° μ΄λ €μ°λ©°, μΌκ΄μ±μ μ μ§νκΈ°λ μ΄λ ΅λ€κ³ νλ€.
λ°λΌμ, μν°ν°μ κ°μ μμ ν λλ setterλ₯Ό μ§μνκ³ , μ¬μ©ν μλλ₯Ό μ μ μλ λ©μλ νΉμ λΉλ ν¨ν΄μ μ¬μ©νμλ€.
무λΆλ³ν κ°μ²΄ μμ±μ λ§κΈ° μν΄μ(κΈ°λ³Έ μμ±μλ₯Ό λ§κΈ° μν΄μ) μν°ν°μ @NoArgsConstructor(access = AccessLevel.PROTECTED)
μ΄λ
Έν
μ΄μ
μ μ¬μ©νλ€.
μν°ν°λ₯Ό API μ€νμ λ ΈμΆνλ κ²½μ° μν°ν°μ API κ²μ¦ λ‘μ§κ³Ό νλ μ ν μ΄μ κ³μΈ΅μ μν λ‘μ§μ΄ μΆκ°λκ±°λ, μν°ν°κ° λ³κ²½λλ©΄ API μ€ν μ체λ λ³κ²½λλ λ¬Έμ κ° λ°μνλ€.
κ·Έλ¬λ―λ‘ API μ€νμ μν°ν° λμ λ³λλ‘ μμ±ν DTOλ₯Ό 맀ννμ.
μ 체 κ²μκΈμ μ‘°ννλ κΈ°λ₯μμ λ°ν νμ
μ΄ List<Post>
λΌλ©΄, Json κ°μ²΄λ [{Post1}, {Post2}, {Post3}, ...] ννλ‘ λ°νλλ€.
λ§μ½ PostλΏλ§ μλλΌ Postμ κ°μκ°μ λ€λ₯Έ λ°μ΄ν°λ₯Ό μΆκ° μμ²νλ κ²½μ° Json κ°μ²΄λ₯Ό λ°ννκΈ° κΉλ€λ‘μμ§λ€.
λ°λΌμ, {"count":2, "Post":[{Post1}, {Post2}]} ννλ‘ μ μ°ν Json κ°μ²΄ λ°νμ μν΄μ Result ν΄λμ€λ‘ 컬λ μ μ κ°μΈμ λ°ννλ€.
200 OK
μ κ°μ HTTP μν μ½λλΏλ§ μλλΌ, μν©μ λ°λΌ λͺ
νν μ 보λ₯Ό μ λ¬ν μ μλ HTTP μν μ½λλ€λ μ¬μ©νλ€.
200 OK
: μμ²μ΄ μ±κ³΅μ μΌλ‘ μλ£λμμ λ μ¬μ©201 Created
: μλ‘μ΄ λ¦¬μμ€κ° μμ±λμμ λ μ¬μ© 204 No Content
: 리μμ€μ μμ κ° μ μ μ²λ¦¬λμμ λ μ¬μ©@RestController
@RequiredArgsConstructor
public class PostApiController {
private final PostService postService;
@ResponseStatus(HttpStatus.CREATED)
@PostMapping("/posts")
public PostDto writePost(@RequestBody PostDto postDto) {
Post post = Post.builder()
.title(postDto.getTitle())
.content(postDto.getContent())
.build();
postService.writePost(post);
return PostDto.from(post);
}
@ResponseStatus(HttpStatus.OK)
@GetMapping("/posts")
public Result<PostDto> findAllPostBy() {
List<Post> findPost = postService.findAllPost();
List<PostDto> findPostDto = findPost.stream()
.map(m -> PostDto.from(m))
.collect(Collectors.toList());
return Result.from(findPostDto);
}
@ResponseStatus(HttpStatus.OK)
@GetMapping("/posts/{id}")
public PostDto findById(@PathVariable("id") Long id) {
Post findPost = postService.findPost(id);
return PostDto.from(findPost);
}
@ResponseStatus(HttpStatus.OK)
@PatchMapping("/posts/{id}")
public PostDto updatePost(@PathVariable("id") Long id, @RequestBody PostDto postDto) {
Post updatePost = postService.updatePost(id, postDto);
return PostDto.from(updatePost);
}
@ResponseStatus(HttpStatus.NO_CONTENT)
@DeleteMapping("/posts/{id}")
public String deletePost(@PathVariable("id") Long id) {
postService.deletePost(id);
return "ok";
}
}
μ΄λ² νμ°¨λΆν° 본격μ μΈ API κ°λ°μ μμνλ€.
μ¬μ€ κ°μλ₯Ό ν΅ν΄μ CRUD κ°λ°μ κ²½νν΄λ³Έ μ μ μμ§λ§, νΌμ νμΌλ‘ νλ κ²μ κ±°μ μ²μμ΄λ€.
μ°μ λλ κ°λλλ‘ κ΅¬νμ μ±κ³΅νμ§λ§ λΆμ‘±ν λΆλΆμ΄ λ§μμ λ€μν μμ λ₯Ό 보며 μ μ°¨ κ°μ μν¬ μκ°μ΄λ€.
μλΉμ€ κ³μΈ΅μ μμ΄μΌ ν λ‘μ§μ΄ 컨νΈλ‘€λ¬ κ³μΈ΅μ μλ λ± κ° κ³μΈ΅λ³ μ΄λ ν μν μ μνν΄μΌ νλμ§ κ°μ΄ μμ ν μ‘νμ§ μμ λ― νλ€.
-> κ°λ°μ μμνκΈ° μ μ€κ³μ κ³ λ―Όνλ μκ°μ λ리기
DTOλ₯Ό μ΄λ»κ² μ€κ³νκ³ , μ΄λ»κ² μ¬μ©ν μ§μ λν΄ λ§μ΄ λΆμ‘±νλ€.
-> DTOλ₯Ό μ μ¬μ©νλμ§ λͺ
ννκ² λ°μλ€μΈ νμ λ€μν μμ μ½λλ₯Ό 보며 νμ΅νκΈ°
κ°κ°μ μ΄λ
Έν
μ΄μ
μ μΈμ , μ΄λμ, μ΄λ»κ², μ μ¬μ©νλμ§μ λν μ΄ν΄κ° λΆμ‘±νλ€.
-> μ€νλ§ μΆ©λΆν 볡μ΅νκΈ°