RestController를 사용하여 데이터를 반환하는 경우 기본적으로 해당 객체가 직렬화되어 HTTP 응답의 본문으로 전송된다. 그러므로 return boardRepo.findAll();과 같이 데이터를 반환하는 경우에는 해당 객체가 직렬화되어 JSON 또는 XML 형식으로 클라이언트에게 전송된다.
ResponseEntity를 사용하여 데이터를 반환하는 경우에는 HTTP 응답의 다양한 측면을 세밀하게 제어할 수 있다. ResponseEntity는 HTTP 상태 코드, 헤더 및 본문 데이터를 포함하는 래퍼 클래스이기 때문에, 클라이언트에게 전달되는 응답을 보다 세밀하게 조정할 수 있다.
예를 들어, 특정 상황에 따라 다른 HTTP 상태 코드를 반환하고 싶거나, 추가적인 헤더를 응답에 포함시키고 싶은 경우에는 ResponseEntity를 사용하여 그러한 조정을 할 수 있다. 또한, 응답 본문의 내용을 수정하거나 가공하는 등의 작업도 가능하다.
*둘 다 기본적으로 json 형식으로 반환된다.
ResponseEntity를 사용하면 좀 더 세부적인 내용 수정이 가능하며, 특히 HTTP 응답을 다룰 때 더 많은 제어를 원할 때 유용하게 사용된다.
반면에 간단하게 데이터를 반환하는 경우에는 @RestController를 사용하여 직렬화된 데이터를 바로 반환하는 것이 편리하다.
@PostMapping("/board/write")
public Board writeBoard(@RequestParam("title") String title, @RequestParam("content") String content){
System.out.println("/board/write/ title: " + title);
System.out.println("/board/write/ content: " + content);
Board board = new Board();
board.setUsername(SecurityContextHolder.getContext().getAuthentication().getName());
board.setTitle(title);
board.setContent(content);
board.setCreatedDate(new Date());
board.setModifiedDate(new Date());
boardRepo.save(board);
return board;
}
headers 부분
body 부분
@PostMapping("/board/write")
public ResponseEntity<Object> writeBoard(@RequestParam("title") String title, @RequestParam("content") String content){
System.out.println("/board/write/ title: " + title);
System.out.println("/board/write/ content: " + content);
Board board = new Board();
board.setUsername(SecurityContextHolder.getContext().getAuthentication().getName());
board.setTitle(title);
board.setContent(content);
board.setCreatedDate(new Date());
board.setModifiedDate(new Date());
boardRepo.save(board);
// Creating HttpHeaders instance to add custom headers
HttpHeaders headers = new HttpHeaders();
headers.add("Custom-Header", "Value"); // Add custom header
return ResponseEntity.badRequest().headers(headers).body(board);
}
body 부분
headers 부분
커스텀 헤더가 추가된 것을 볼 수 있다.