Spring Boot로 CRUD API를 구현하던중 update부분에서 Put하고 Patch의 차이를 더 알고싶어 구현해보았다.
@PutMapping("/api/blogs/{id}")
public Long updateBlog(@PathVariable Long id, @RequestBody BlogRequestDto requestDto) throws SQLException {
return blogService.update(id, requestDto);
}
public Long update(Long id, BlogRequestDto requestDto) throws SQLException {
Blog blog = blogRepository.findById(id)
.orElseThrow(() -> new NullPointerException("해당 아이디가 존재하지 않습니다."));
blog.update(requestDto);
return id;
}
@PatchMapping("api/blogs/{id}")
public Long update2(@PathVariable Long id, @RequestBody BlogRequestDto requestDto) throws SQLException {
return blogService.patchUpdate(id, requestDto);
}
public Long patchUpdate(Long id, BlogRequestDto requestDto) throws SQLException {
Blog blog = blogRepository.findById(id)
.orElseThrow(() -> new NullPointerException("해당 아이디가 존재하지 않습니다."));
List<BlogRequestDto> list = new ArrayList<>();
list.add(requestDto);
for (int i=0;i< list.size();i++) {
if (list.get(i).getContents() != null) blog.setContents(list.get(i).getContents());
if (list.get(i).getUsername() != null) blog.setUsername(list.get(i).getUsername());
if (list.get(i).getPassword() != null) blog.setPassword(list.get(i).getPassword());
if (list.get(i).getTitle() != null) blog.setTitle(list.get(i).getTitle());
}
blogRepository.save(blog);
return id;
}
안녕하세요, 먼저 PUT/PATCH 예제를 통한 자세한 설명으로 이해에 도움을 주셔서 감사합니다.
"Patch로 요청이 들어오면 Service의 patchUpdate함수로 넘어간다."
부분에서
List list = new ArrayList<>();
로 리스트로 만들어준다음
list.add(requestDto); 를 통해 param값을 리스트에 "1"건을 넣어준 뒤
하단에서 따로 리스트로 진행을 시킨 로직상 이유가 있을지 궁금하여 댓글드려봅니다!
하나의 객체를 통해 비교하여 blog라는 객체에 넣는 것과 비교하여
가용성등을 통한 이점이 있을까 싶어 질문드려봅니다