@RestController 에서 일반 데이터 반환 vs ResponseEntity 사용

Hyun·2024년 2월 7일
0

Spring

목록 보기
37/38
post-thumbnail

RestController를 사용하여 데이터를 반환하는 경우 기본적으로 해당 객체가 직렬화되어 HTTP 응답의 본문으로 전송된다. 그러므로 return boardRepo.findAll();과 같이 데이터를 반환하는 경우에는 해당 객체가 직렬화되어 JSON 또는 XML 형식으로 클라이언트에게 전송된다.

ResponseEntity를 사용하여 데이터를 반환하는 경우에는 HTTP 응답의 다양한 측면을 세밀하게 제어할 수 있다. ResponseEntity는 HTTP 상태 코드, 헤더 및 본문 데이터를 포함하는 래퍼 클래스이기 때문에, 클라이언트에게 전달되는 응답을 보다 세밀하게 조정할 수 있다.

예를 들어, 특정 상황에 따라 다른 HTTP 상태 코드를 반환하고 싶거나, 추가적인 헤더를 응답에 포함시키고 싶은 경우에는 ResponseEntity를 사용하여 그러한 조정을 할 수 있다. 또한, 응답 본문의 내용을 수정하거나 가공하는 등의 작업도 가능하다.
*둘 다 기본적으로 json 형식으로 반환된다.

정리

ResponseEntity를 사용하면 좀 더 세부적인 내용 수정이 가능하며, 특히 HTTP 응답을 다룰 때 더 많은 제어를 원할 때 유용하게 사용된다.

반면에 간단하게 데이터를 반환하는 경우에는 @RestController를 사용하여 직렬화된 데이터를 바로 반환하는 것이 편리하다.

예시)

데이터를 바로 반환하는 경우(기본 200 코드)

@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 부분

ResponseEntity 를 사용하여 세부 응답의 세부 사항을 수정한 경우(400 코드 & 헤더 커스텀)

@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 부분
커스텀 헤더가 추가된 것을 볼 수 있다.

profile
better than yesterday

0개의 댓글