在开发过程中由于大意遇到一个坑,因为需要返回的是JSON数据,但是在controller上只加了@Controller注解,导致一直没产生返回值。后来排查发现此处应该使用@RestController,原因如下:
@RestController注解相当于@ResponseBody + @Controller合在一起的作用。
1、如果使用@RestController注解Controller类,则Controller中的方法无法返回jsp页面,或者html,配置的视图解析器 InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。
2、如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。
3、@ResponseBody
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;