SpringBoot 异常区分页面请求或Json请求
  C5bk9rm9TFUo 2023年11月02日 22 0
@RestController
public class RestErrorEndpoint implements ErrorController {
 
@Override
public String getErrorPath() {
return null;
}
 
    @RequestMapping(value = {"${server.error.path:${error.path:/error}}"},produces="application/json")  
    @ResponseBody  
    public String error(HttpServletRequest request) {  
    System.out.println("json");
    return "helloError";
    } 
 
@RequestMapping(  value = {"${server.error.path:${error.path:/error}}"},  produces = {"text/html"}  )  
   public ModelAndView errorHtml(HttpServletRequest request) {  
System.out.println("html");
       return new ModelAndView("/error/error");  
   }  
 
//    @RequestMapping({"${error.path:/error}"})  
//    @ResponseBody  
//    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {  
//        Map body = this.getErrorAttributes(request, this.getTraceParameter(request));  
//        HttpStatus status = this.getStatus(request);  
//        return new ResponseEntity(body, status);  
//    } 
 
}

spring boot 根据Accept头的内容,输出不同格式的错误响应。比如针对浏览器的请求生成html页面,针对其它请求生成json格式的返回。字段为accept的text/html的内容来判断。

produces = {"text/html"} 页面请求。

produces="application/json"为json或ajax请求

 

 

============================================================

 

 

 

 

 

 

最近开始使用springboot,发现一个奇怪的现象,一个url报错

使用浏览器地址请求返回一个html界面

 



1. Whitelabel Error Page  
2.   
3. This application has no explicit mapping for /error, so you are seeing this as a fallback.  
4.   
5. Tue Nov 29 10:48:26 CST 2016  
6. There was an unexpected error (type=Bad Request, status=400).  
7. Required String parameter 'fileName' is not present



使用postman请求返回一个json格式的响应

 


1. {  
2.     "timestamp": 1480388264722,  
3.     "status": 400,  
4.     "error": "Bad Request",  
5.     "exception": "org.springframework.web.bind.MissingServletRequestParameterException",  
6.     "message": "Required String parameter 'fileName' is not present",  
7.     "path": "/file/delete"  
8. }


究竟spring boot怎么来区分这种请求返回不同格式的数据的呢。经过一步步跟进。精髓在BasicErrorController这个类上

 

1. @RequestMapping(  
2. "${error.path:/error}"},  
3. "text/html"}  
4.     )  
5. public ModelAndView errorHtml(HttpServletRequest request) {  
6. return new ModelAndView("error", this.getErrorAttributes(request, false));  
7.     }  
8.   
9. @RequestMapping({"${error.path:/error}"})  
10. @ResponseBody  
11. public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {  
12. this.getErrorAttributes(request, this.getTraceParameter(request));  
13. this.getStatus(request);  
14. return new ResponseEntity(body, status);  
15.     }


 

spring boot 根据Accept头的内容,输出不同格式的错误响应。比如针对浏览器的请求生成html页面,针对其它请求生成json格式的返回。字段为accept的text/html的内容来判断

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
C5bk9rm9TFUo