Сейчас я изучаю, как работает слой контроллера Spring. Если я хочу иметь контроллер, который возвращает модель и имя представления (например, имя файла HTML), я просто расширяю класс AbstractController, затем реализую метод handleRequestInternal, регистрируя этот контроллер как bean и устанавливая в моем HandlerMapping (например, SimpleUrlHandlerMapping) какой путь сопоставляется с каким контроллером.
Но это заставляет меня возвращать имя вида.
Что делать, если я не хочу указывать имя представления и просто возвращать String (например, форматированный json или обычный текст) или Object для отображения того же, что и @RestController
?
ИЗМЕНИТЬ.
Или, может быть, другими словами. Какой слой с надстройкой bean следует использовать, чтобы опустить имя представления и модель отображения так же, как json/xml/plain text?
ОТВЕТ.
Я не смог найти JSON-представление bean, предоставленное 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;
}
}