自定义控制器没有视图名称

时间:2016-12-07 11:15:37

标签: spring rest spring-mvc spring-restcontroller spring-rest

我现在正在调查Spring Controller层的实际工作方式。如果我想拥有一个返回模型和视图名称的控制器(例如HTML文件名),我只需要扩展AbstractController类,然后实现一个handleRequestInternal方法,将该控制器注册为bean,并在我的HandlerMapping(例如SimpleUrlHandlerMapping)中设置什么路径被映射到什么控制器。

但这迫使我返回视图名称。

如果我不指定视图名称,只返回String(例如格式化的json或纯文本)或Object以显示与@RestController显示相同的内容,该怎么办?

EDIT。

或者换句话说。我应该使用什么视图图层bean来省略视图名称和显示模型,就像json / xml / plain文本一样?

ANSWER。

我无法找到Spring提供的任何JSON视图bean。

我做的解决方法是创建自己的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;
    }
}

1 个答案:

答案 0 :(得分:0)

@ nowszy94 - 在方法之前提及@ResponseBody。 Spring会自动将其转换为字符串,而不是通过视图解析器来查找jsp。