@Controller与@RestControllerd的区别

1、@RestController注解相当于@ResponseBody + @Controller合在一起的作用。

2、@ResponseBody的作用就是将方法的返回值以特定的格式写入到response的body区域,进而将数据返回给客户端。

   当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。

       如果返回值是字符串,那么直接将字符串写到客户端;如果是一个对象,会将对象转化为json串,然后写到客户端。

3、注意编码
        如果返回对象,按utf-8编码。如果返回String,默认按iso8859-1编码,页面可能出现乱码。因此在注解中我们可以手动修改编码格式,例如@RequestMapping(value="/cat/query",produces="text/html;charset=utf-8"),前面是请求的路径,后面是编码格式。

4、原理
        控制层方法的返回值是如何转化为json格式的字符串的?其实是通过HttpMessageConverter中的方法实现的,它本是一个接口,在其实现类完成转换。如果是bean对象,会调用对象的getXXX()方法获取属性值并且以键值对的形式进行封装,进而转化为json串。如果是map集合,采用get(key)方式获取value值,然后进行封装。

5、@RestController加在类上面的注解,使得类里面的每个方法都将json/xml返回数据加返回到前台页面中。

6、1)如果只是使用@RestController注解Controller,则Controller中的方法无法返回jsp页面,配置的视图解析器InternalResourceViewResolver不起作用,返回的内容就是Return 里的内容。

例如:本来应该到success.jsp页面的,则其显示success.

2)如果需要返回到指定页面,则需要用 @Controller配合视图解析器InternalResourceViewResolver才行。
3)如果需要返回JSON,XML或自定义mediaType内容到页面,则需要在对应的方法上加上@ResponseBody注解。


原文链接:https://blog.csdn.net/gg12365gg/article/details/51345601

原文链接:https://blog.csdn.net/jiahao1186/article/details/91980316

原文地址:https://www.cnblogs.com/9797ch/p/12424673.html