服务异常处理

spring boot对404处理结果

  • 浏览器请求结果


  • Postman请求结果


先看一下源码BasicErrorController

@RequestMapping(
        produces = {"text/html"}
    )
    public ModelAndView errorHtml(HttpServletRequest request, HttpServletResponse response) {
        HttpStatus status = this.getStatus(request);
        Map<String, Object> model = Collections.unmodifiableMap(this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.TEXT_HTML)));
        response.setStatus(status.value());
        ModelAndView modelAndView = this.resolveErrorView(request, response, status, model);
        return modelAndView == null ? new ModelAndView("error", model) : modelAndView;
    }

    @RequestMapping
    @ResponseBody
    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
        Map<String, Object> body = this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.ALL));
        HttpStatus status = this.getStatus(request);
        return new ResponseEntity(body, status);
    }
  • 这两个方法分别对应着刚才的两种请求,我们可以知道造成这种不同的原因是http请求的header中的Accept是不是有text/html

所以对于异常的处理,我们也应该分成两个方面来进行处理

1.对于Accept拥有text/html的处理

在resources/resources/error目录下新建响应的错误页面


  • 修改完后的效果


2.对其他形式访问的处理

/**
 * @Auther: guaidan
 * @Date: 2018/10/9 14:41
 * @Description:
 */
@ControllerAdvice
public class ControllerExceptionHandler {

     @ExceptionHandler(UserNotFoundException.class)
     @ResponseBody
     @ResponseStatus(HttpStatus.INTERNAL_SERVER_ERROR)
     public Map<String,Object> handleUserNotFindException(UserNotFoundException ex){
         Map<String,Object> result = new HashMap<>();
         result.put("id",ex.getId());
         result.put("msg",ex.getMessage());
         return result;
     }

}

响应结果


©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容