@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 }
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号