美文网首页
Spring4.x 系列之 @RestController

Spring4.x 系列之 @RestController

作者: ChrisShen93 | 来源:发表于2017-02-20 12:44 被阅读0次

    很久没搭建过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风格的接口,大可采用这种方式。

    相关文章

      网友评论

          本文标题:Spring4.x 系列之 @RestController

          本文链接:https://www.haomeiwen.com/subject/xuzswttx.html