@RestController @Controller区别——记一个傻逼bug

断点打到return那一行值正常,然后返回401。

修改logback-spring-dev的日志级别到debug,发现调用了web.FilterChainProxy -/error。

将/error放入Fliter允许通过,发现返回了404。

那么可能就是view这出问题了。

检查发现@RestController写成了@Controller,也没有加@Requestbody,导致返回的实体没有变成json返回。

 

@RestController 在 Spring MVC 中就是 @Controller 和 @ResponseBody 注解的集合。

@RestController 注解是从 Spring 4.0 版本开始添加进来的,主要用于更加方便的构建 RESTful Web 服务。

@ResponseBody

该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。使用此注解此次请求将不再走视图处理器,而是直接将此响应结果写入到输入流中,其效果等同于使用response对象输出指定格式的数据。logb

在 RESTful 的服务中,我们大部分情况是使用 JSON 为返回数据的,所以你可以直接使用 @RestController 替换掉 @Controller 和 @ResponseBody。

根据上面的解释,下面的 2 段代码是完全一样的:

@Controller @ResponseBody public class MVCController { .. your logic } @RestController public class RestFulController { .... your logic }

posted @ 2022-02-23 17:09  魏无咎  阅读(72)  评论(0)    收藏  举报