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:


        
            
            
        
    

此处,我使用阿里的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中,尽量使用 自动装配。若要手动注册,应使用下面的两个bean
  
  

若使用老版本的

  

将会得到异常信息

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)