@ResponseBody vs ResponseEntity<T>

Jae-Baek Song·2023년 4월 28일
0

@ResponseBody

@ResponseBody 를 사용하면 응답 결과를 HTTP 메시지 바디에 직접 담아서 전달할 수 있다.
물론 이 경우에도 view를 사용하지 않는다.

@RequestBody는 생략 불가능

스프링은 @ModelAttribute , @RequestParam 과 같은 해당 애노테이션을 생략시 다음과 같은 규칙을
적용한다.
String , int , Integer 같은 단순 타입 = @RequestParam
나머지 = @ModelAttribute (argument resolver 로 지정해둔 타입 외)

@ResponseBody 문제점

  • Status 를 @ResponseStatus 어노테이션을 사용하여 따로 설정해주어야한다.
  • Header 에 대해서 유연하게 설정을 할 수 없다.

ResponseEntity

return new ResponseEntity<MoveResponseDto>(moveResponseDto, headers, HttpStatus.valueOf(200));

return ResponseEntity.ok()
       .headers(headers)
       .body(moveResponseDto);

ResponseEntity 사용하여 HTTP 응답에 필요한 요소들 중 대표적인 Status, Header , Body 를 지정하여 응답을 만들 수가 있습니다.

https://tecoble.techcourse.co.kr/post/2021-05-10-response-entity/


HttpRequestHandlerAdapter

@FunctionalInterface
public interface HttpRequestHandler {
	void handleRequest(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException;

}

HttpMessageConverter

스프링 MVC는 다음의 경우에 HTTP 메시지 컨버터를 적용한다.

  • HTTP 요청: @RequestBody , HttpEntity(RequestEntity)
  • HTTP 응답: @ResponseBody , HttpEntity(ResponseEntity)

스프링 부트 기본 메시지 컨버터

0 = ByteArrayHttpMessageConverter // 클래스 타입: byte[] , 미디어타입: */* 
1 = StringHttpMessageConverter // 클래스 타입: String , 미디어타입: */*
2 = MappingJackson2HttpMessageConverter // 클래스 타입: 객체 또는 HashMap , 미디어타입 application/json

0개의 댓글