Пользовательский контроллер без имени представления

Сейчас я исследую, как на самом деле работает слой 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;
    }
}

person nowszy94    schedule 07.12.2016    source источник


Ответы (1)


@ nowszy94 - просто укажите @ResponseBody перед методом. Spring автоматически преобразует его в строку вместо того, чтобы проходить через преобразователь представлений, чтобы найти файл jsp.

person Hubert E    schedule 10.02.2017
comment
насколько я знаю, @ResponseBody следует использовать с аннотацией @Controller. В моем случае у меня есть класс, который расширяет AbstractController, а затем я создаю экземпляр этого класса и настраиваю его как Bean. - person nowszy94; 10.02.2017