Нет смысла аннотировать ваш класс контроллера с помощью @RestController
(вместо @Controller
), если он имеет только методы-обработчики, которые возвращают ResponseEntity
.
Spring MVC. Инфраструктура по умолчанию регистрирует список HandlerMethodReturnValueHandler
реализации для каждого отдельного поддерживаемого типа возвращаемого значения. Например, есть ModelAndViewMethodReturnValueHandler
для методов-обработчиков, возвращающих ModelAndView
объекты; DeferredResultMethodReturnValueHandler
для методов, возвращающих DeferredResult
или ListenableFuture
; ViewNameMethodReturnValueHandler
для методов, возвращающих значения String
, которые должны интерпретироваться как имена представлений.
Список обрабатывается по порядку, и используется первый найденный обработчик, который может поддерживать возвращаемое значение. Обработка реализации ResponseEntity
, HttpEntityMethodProcessor
, регистрируется до одной обработки @ResponseBody
, RequestResponseBodyMethodProcessor
. @RestController
, в некотором смысле, игнорируется для соответствующего метода-обработчика, возвращающего ResponseEntity
.
Если у вашего класса контроллера есть другие методы-обработчики, которые возвращают значения, которые предназначены для прямой сериализации, то он не ' Больно хранить @RestController
(вместо того, чтобы пометить все эти методы с помощью @ResponseBody
). Но если все ваши методы возвращают ResponseEntity
, то это не нужно и может вводить в заблуждение.
К вашему сведению, список обработчиков по умолчанию генерируется в закрытом методе с именем getDefaultReturnValueHandlers()
в RequestMappingHandlerAdapter
. Вы можете предоставить свой список, позвонив по номеру setReturnValueHandlers
.