记录mark.
spring 注解@ExceptionHandler 只在本类种有效,
当需要拦截全局异常时,需结合 @ControllerAdvice
第一种本类中生效
@Validated
@Controller
@RequestMapping("/shi")
public class ShiController {
@RequestMapping("/vali")
@ResponseBody
public String vali(@NotBlank(message = "名称不能为空") String name){
return JSON.toJSONString("hello world");
}
/**
* ExceptionHandler 只针对当前类有效
* 如需要结合全局使用需要结合 @ControllerAdvice
* @param request
* @param response
* @param exception
* @return
*/
@ExceptionHandler({ConstraintViolationException.class})
public String handleExce(HttpServletRequest request, HttpServletResponse response,Exception exception){
System.out.println("handleExce");
System.out.println("异常: " + exception);
request.setAttribute("msg",exception);
return "indexTest.html";
}
}
第二种全局生效
//测试类
@Validated
@Controller
@RequestMapping("/shi")
public class ShiController {
@RequestMapping("/vali")
@ResponseBody
public String vali(@NotBlank(message = "名称不能为空") String name){
return JSON.toJSONString("hello world");
}
}
//全局异常类
@ControllerAdvice
public class ErrorController {
@ExceptionHandler({ConstraintViolationException.class})
public String handleException(HttpServletRequest request, HttpServletResponse response,Exception exception){
System.out.println("异常: " + exception);
request.setAttribute("msg",exception);
return "indexTest.html";
}
}
--------------------------------------------------------------------------------------------------------------------------
最后在第一种情况下可以结合HandlerExceptionResolver.class 全局异常使用,当其他类有异常需要抛出,处理业务时,可以考虑使用。