【问题标题】:Custom controller without view name没有视图名称的自定义控制器
【发布时间】:2017-04-22 07:28:20
【问题描述】:

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

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

如果我不想指定视图名称,只返回字符串(例如格式化的 json 或纯文本)或对象以显示与 @RestController 显示相同,该怎么办?

编辑。

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

回答。

我找不到 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;
    }
}

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 据我所知,@ResponseBody 应该与@Controller 注释一起使用。就我而言,我有一个扩展 AbstractController 的类,然后,我正在创建该类的实例并将其设置为 Bean。
    猜你喜欢
    • 2017-03-26
    • 1970-01-01
    • 2015-08-11
    • 2016-09-27
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    相关资源
    最近更新 更多