В чем разница между ResponseEntity <T> и @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:)
Ответы
Ответ 1
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
К числу наиболее часто используемых относятся Status, Content-Type и Cache-Control.
Если вам это не нужно, использование @ResponseBody будет немного более кратким.