@ControllerAdvice需要与@ExceptionHandler配合使用
@ControllerAdvice放在类上,表明这个类用以处理异常
@ExceptionHandler(XXException.class)则用在具体的方法上,表示处理特定的异常
@ResponseStatus(HttpStatus.BAD_GATEWAY)可以在处理异常后,返回特定的状态
@RestControllerAdvice=@ControllerAdvice+@ResponseBody
栗子:
@GetMapping("ex")
public Map ex(@RequestParam String sss) throws MyException {
HashMap h = new HashMap();
h.put("aaa", sss);
if (sss.equals("ex")) {
throw new MyException();
}
return h;
}
异常类:
public class MyException extends Exception {
}
处理:
@RestControllerAdvice
public class GlobalExceptionHandler {
@ResponseStatus(HttpStatus.BAD_GATEWAY)
@ExceptionHandler(MyException.class)
public Map handler(MyException e, HttpServletRequest httpServletRequest) {
HashMap map = new HashMap();
map.put("bbb", "xxxxx");
return map;
}
}