Сейчас я исследую, как на самом деле работает слой Spring Controller. Если я хочу иметь контроллер, который возвращает имя модели и представления (например, имя файла HTML), я просто расширяю класс AbstractController, затем реализую метод handleRequestInternal, регистрируя этот контроллер как bean-компонент и устанавливая в моем HandlerMapping (например, SimpleUrlHandlerMapping) какой путь какому контроллеру сопоставляется.
Но это заставляет меня вернуть имя представления.
Что, если я не хочу указывать имя представления, а просто возвращать String (например, форматированный json или простой текст) или Object для отображения так же, как отображается @RestController
?
РЕДАКТИРОВАТЬ.
Или другими словами. Какой компонент уровня представления следует использовать, чтобы опустить имя представления и модель отображения, как json / xml / plain text?
ОТВЕЧАТЬ.
Мне не удалось найти bean-компонент представления JSON, предоставленный Spring.
Обходной путь, который я сделал, состоял в том, чтобы создать собственный JSONViewResolver
, зарегистрировать его как bean-компонент, а затем указать в контроллере, какое представление я хочу.
public class JsonViewResolver implements ViewResolver {
@Override
public View resolveViewName(String viewName, Locale locale) throws Exception {
MappingJackson2JsonView mappingJackson2JsonView = new MappingJackson2JsonView();
mappingJackson2JsonView.setPrettyPrint(true);
return mappingJackson2JsonView;
}
}