spring boot 老版本處理異常 對於瀏覽器客戶端,返回error數據
對於非瀏覽器返回json數據, 主要取決於你的請求head 是什么
但是當我們自定義了: 老版本無論請求什么都會返回json異常數據,
@ControllerAdvice public class UserExceptionHandler { @ResponseBody @ExceptionHandler(UserNotFoundExits.class) public Map<String, Object> handleException(Exception e){ Map<String,Object> map = new HashMap<>(); map.put("code","user.notexist"); map.put("message",e.getMessage()); return map; } }
通過閱讀源碼, 新版本的異常處理 就是我們上面強制定義了 異常處理類 ,也會按照 瀏覽器返回error ,客戶端返回json
@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 ? modelAndView : new ModelAndView("error", model); } @RequestMapping public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) { HttpStatus status = this.getStatus(request); // 此處做了更改 if (status == HttpStatus.NO_CONTENT) { return new ResponseEntity(status); } else { Map<String, Object> body = this.getErrorAttributes(request, this.isIncludeStackTrace(request, MediaType.ALL)); return new ResponseEntity(body, status); } }