通过 java 原生的 @Valid 注解和 spring 的 @ControllerAdvice 和 @ExceptionHandler 实现全局异常处理的方法:
controller 中加入 @Valid 注解:
- @RequestMapping(value="/addCountry", method=RequestMethod.POST)
- public ResponseResult addCountry(@RequestBody @Valid Country country) {
- return null;
- }
接受 entity 中加入 @NotNull 注解:(验证还有很多, 这里是举例说明)
- @NotNull(message = "countryname params must not be null.")
- private String countryname;
全局处理工具类加入 @ControllerAdvice 和 @ExceptionHandler 注解:
- @ControllerAdvice
- public class GlobalExceptionAdvisor {
- Logger logger = LoggerFactory.getLogger(GlobalExceptionAdvisor.class);
- /**
- * 提取 Validator 产生的异常错误
- * @param bindingResult
- * @return
- */
- private BaseException parseBindingResult(BindingResult bindingResult){
- Map<String,String> errorMsgs = new HashMap<String,String>();
- for (FieldError error:bindingResult.getFieldErrors()){
- errorMsgs.put(error.getField(),error.getDefaultMessage());
- }
- if(errorMsgs.isEmpty()) {
- return new IllegalParameterCommonException();
- }else {
- return new IllegalParameterCommonException(JsonUtils.toJSONString(errorMsgs));
- }
- }
- /**
- * 捕获 @Validate 校验抛出的异常
- * @param e
- * @param request
- * @param response
- * @return
- */
- @ExceptionHandler(BindException.class)
- @ResponseBody
- public ResponseResult validExceptionHandler(BindException e, HttpServletRequest request, HttpServletResponse response) {
- BaseException ex = parseBindingResult(e.getBindingResult());
- logger.error(ex.getMessage());
- return ResultUtil.error(ex);
- }
- /**
- * 捕获 @Validate 校验抛出的异常
- * @param e
- * @param request
- * @param response
- * @return
- */
- @ExceptionHandler(MethodArgumentNotValidException.class)
- @ResponseBody
- public ResponseResult validException2Handler(MethodArgumentNotValidException e, HttpServletRequest request, HttpServletResponse response) {
- BaseException ex = parseBindingResult(e.getBindingResult());
- logger.error(ex.getMessage());
- return ResultUtil.error(ex);
- }
- @ExceptionHandler(value = BaseException.class)
- @ResponseBody
- public ResponseResult gisExceptionHandler(HttpServletRequest req, BaseException e) throws Exception {
- logger.error(e.getMessage());
- return ResultUtil.error(e);
- }
- @ExceptionHandler(value = Exception.class)
- @ResponseBody
- public ResponseResult exceptionHandler(HttpServletRequest req, Exception e) throws Exception {
- logger.error(e.toString());
- return ResultUtil.error(new BaseException());
- }
- }
BaseException,ResponseResult 等是自己封装的处理工具类.
来源: http://www.bubuko.com/infodetail-2931788.html