SpringBoot 异常区分页面请求或Json请求

 

@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界面

 

[plain]  view plain  copy
 
  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格式的响应

 

[plain]  view plain  copy
 
  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这个类上

 

[java]  view plain  copy
 
  1. @RequestMapping(  
  2.         value = {"${error.path:/error}"},  
  3.         produces = {"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.         Map body = this.getErrorAttributes(request, this.getTraceParameter(request));  
  13.         HttpStatus status = this.getStatus(request);  
  14.         return new ResponseEntity(body, status);  
  15.     }  

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值