Spring4.x 系列之 @RestController

很久没搭建过Spring MVC的开发架子,今早在@ResponseBody返回JSON处卡了会儿。翻阅doc,发现了以前不知道的注解,@RestController,了解了下,是个好东西。


@RestController注解是Spring4为了简化RESTFUL风格的开发而出现的,它继承了传统的@Controller。
使用@RestController,无需给每个@RequestMapping添加@ResponseBody注解。

下面是@RestController的定义:

@Target(value=TYPE)  
@Retention(value=RUNTIME)  
@Documented  
@Controller  
@ResponseBody  
public @interface RestController  

在 spring-mvc.xml 中,指定messageConverter:

<mvc:annotation-driven>
        <mvc:message-converters>
            <bean class="org.springframework.http.converter.StringHttpMessageConverter"/>
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter" />
        </mvc:message-converters>
    </mvc:annotation-driven>

此处,我使用阿里的fastjson代替了Spring内置的Jackson,光是看命名就知道为啥这么做了:)


需要注意的地方

  1. @RestController虽然继承了@Controller,但是却不能返回jsp,即试图解析器InternalResourceViewResolver会失效
@RequestMapping(value = "/test")
public ModelAndView testJsp() {
    return new ModelAndView("getPage");
}

若使用@Controller注解上面方法所在的类,将返回getPage.jsp页面
而使用@RestController注解,则会返回"getPage"的字符串

  1. 在Spring-mvc.xml中,尽量使用 <mvc:annotation-driven> 自动装配。若要手动注册,应使用下面的两个bean
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>  
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">  

若使用老版本的

<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>  
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">

将会得到异常信息

would dispatch back to the current handler URL [/getPage] again. Check your ViewResolver setup! (Hint: This may be the result of an unspecified view, due to default view name generation.)

小结

使用@RestController,就不用给每个@RequestMapping添加@ResponseBody,也省去了配置 content-typemedia-type,很是方便。
在开发中,若是RESTFUL风格的接口,大可采用这种方式。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,947评论 6 342
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,904评论 18 139
  • spring官方文档:http://docs.spring.io/spring/docs/current/spri...
    牛马风情阅读 1,721评论 0 3
  • Spring的模型-视图-控制器(MVC)框架是围绕一个DispatcherServlet来设计的,这个Servl...
    alexpdh阅读 2,665评论 0 3
  • 翻译自Spring官方文档 4.1.2版本 相关文章: Spring参考手册 1 Spring Framework...
    liycode阅读 710评论 0 2