source

ResponseEntity와 @ResponseBody의 차이점은 무엇입니까?

factcode 2023. 10. 26. 21:52
반응형

ResponseEntity와 @ResponseBody의 차이점은 무엇입니까?

컨트롤러에 메시지를 반환하는 간단한 핸들러가 있습니다.

@RequestMapping(value = "/message")
@ResponseBody
public Message get() {
    return new Message(penguinCounter.incrementAndGet() + " penguin!");
}

동시에 나는 이런 것을 사용할 수 있습니다.

@RequestMapping(value = "/message")
ResponseEntity<Message> get() {
    Message message = new Message(penguinCounter.incrementAndGet() + " penguin!");
    return new ResponseEntity<Message>(message, HttpStatus.OK);
}

이 두 접근법의 차이는 무엇입니까?HttpStatus는 고려하지 맙시다 :)

ResponseEntity는 임의 HTTP 응답 헤더를 정의할 때 추가된 유연성을 제공합니다.여기에서 4번째 생성자를 참조하십시오.

http://docs.spring.io/spring/docs/3.0.x/api/org/springframework/http/ResponseEntity.html

ResponseEntity(T body, MultiValueMap<String,String> headers, HttpStatus statusCode) 

가능한 HTTP 응답 헤더 목록은 다음에서 사용할 수 있습니다.

http://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Responses

일반적으로 사용되는 것은 상태, 내용 유형 및 캐시 제어입니다.

필요 없는 경우 @ResponseBody를 사용하는 것이 조금 더 간결합니다.

HttpEntity는 HTTP 요청을 나타내거나 응답헤더본문으로 구성됩니다.

// Only talks about body & headers, but doesn't talk about status code
public HttpEntity(T body, MultiValueMap<String,String> headers)

ResponseEntity는 HttpEntity를 확장하지만 Http 상태 코드도 추가합니다.

// i.e ResponseEntity = HttpEntity + StatusCode
public ResponseEntity(T body, MultiValueMap<String,String> headers, HttpStatus statusCode)

따라서 HTTP 응답을 완전히 구성하는 데 사용됩니다.

Ex의 경우:

@ControllerAdvice 
public class JavaWebExeptionHandler {

    @Autowired
    ExceptionErrorCodeMap exceptionErrorCodeMap;

    @ExceptionHandler(RuntimeException.class)
    public final ResponseEntity<ExceptionResponseBody> handleAllExceptions(Exception ex) {
        Integer expCode = exceptionErrorCodeMap.getExpCode(ex.getClass());
        // We have not added headers to response here, If you want you can add by using respective constructor
        return new ResponseEntity<ExceptionResponseBody>(new ExceptionResponseBody(expCode, ex.getMessage()),
                HttpStatus.valueOf(expCode));
    }

}

@ResponseBody는 메서드가 사용된 메서드반환 값이 응답 본문에 바인딩되어 있음을 나타냅니다(메소드의 반환 값이 Http 응답 본문으로 처리됨을 의미합니다).

ResponseEntity<>는 유형 매개 변수가 있는 일반 클래스이므로 응답 본문에 직렬화할 개체 유형을 지정할 수 있습니다.

@ResponseBody는 주석으로 메서드의 반환 값이 HTTP 응답 본문에 직렬화됨을 나타냅니다.

ResponseEntity<>를 사용하여 헤더를 설정할 수 있습니다.

@ResponseEntity는 헤더, 본문 및 상태 코드를 포함하는 응답을 나타냅니다.@ResponseBody는 응답 본문만 반환합니다.

언급URL : https://stackoverflow.com/questions/22725143/what-is-the-difference-between-responseentityt-and-responsebody

반응형