通过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等是自己封装的处理工具类。

Spring中通过java的@Valid注解和@ControllerAdvice实现全局异常处理。的更多相关文章

  1. Spring Boot 2.x 系列教程:WebFlux REST API 全局异常处理 Error Handling

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! 本文内容 为什么要全局异常处理? WebFlux REST 全 ...

  2. 【Spring】28、Spring中基于Java的配置@Configuration和@Bean用法.代替xml配置文件

    Spring中为了减少xml中配置,可以生命一个配置类(例如SpringConfig)来对bean进行配置. 一.首先,需要xml中进行少量的配置来启动Java配置: <?xml version ...

  3. Spring 中的事务操作、注解、以及 XML 配置

    事务 事务全称叫数据库事务,是数据库并发控制时的基本单位,它是一个操作集合,这些操作要么不执行,要么都执行,不可分割.例如我们的转账这个业务,就需要进行数据库事务的处理. 转账中至少会涉及到两条 SQ ...

  4. Spring中基于Java的配置@Configuration和@Bean用法

    spring中为了减少xml中配置,可以声明一个配置类(例如SpringConfig)来对bean进行配置. 一.首先,需要xml中进行少量的配置来启动Java配置: <?xml version ...

  5. Spring中基于Java的配置@Configuration和@Bean用法 (转)

    spring中为了减少xml中配置,可以生命一个配置类(例如SpringConfig)来对bean进行配置. 一.首先,需要xml中进行少量的配置来启动Java配置: <?xml version ...

  6. Spring中基于java的配置

    Spring中为了减少XML配置,可以声明一个配置类类对bean进行配置,主要用到两个注解@Configuration和@bean 例子: 首先,XML中进行少量的配置来启动java配置: <? ...

  7. 在spring中常被忽视的注解 @Primary

    在spring 中使用注解,常使用@Autowired, 默认是根据类型Type来自动注入的. 但有些特殊情况,对同一个接口,可能会有几种不同的实现类,而默认只会采取其中一种的情况下 @Primary ...

  8. Spring中Bean管理的常用注解

    在Spring中,主要用于管理bean的注解分为四大类:1.用于创建对象.2.用于给对象的属性注入值.3.用于改变作用的范围.4.用于定义生命周期.这几个在开发中经常接触到,也可以说每天都会遇见.其中 ...

  9. Spring 中基于 AOP 的 @AspectJ注解实例

    @AspectJ 作为通过 Java 5 注释注释的普通的 Java 类,它指的是声明 aspects 的一种风格.通过在你的基于架构的 XML 配置文件中包含以下元素,@AspectJ 支持是可用的 ...

随机推荐

  1. Spring注解驱动开发之扩展原理

    前言:现今SpringBoot.SpringCloud技术非常火热,作为Spring之上的框架,他们大量使用到了Spring的一些底层注解.原理,比如@Conditional.@Import.@Ena ...

  2. 谷歌的 I/O 2019,究竟推出了什么新特性?

    前言 昨天,也即赶在微软 Build 2019 的第二天,一年一度的2019年 Google I/O大会在美国如期举行,Google I/O 2019全纪录:AI惊艳,Android Q真香,包括两款 ...

  3. iOS Programming Introduction to Auto Layout 自动布局

    iOS Programming Introduction to Auto Layout   自动布局 A single application that runs natively on both t ...

  4. iOS---UICollectionView详解和常用API翻译

    UICollectionView 1.必须要设置布局参数 2.注册cell 用法类似于UITableView 类.自动实现重用,必须注册初始化. 使用UICollectionView必须实现UICol ...

  5. Linux 的 Spinlock 在 MIPS 多核处理器中的设计与实现

    引言 随着科技的发展,尤其是在嵌入式领域,高性能.低功耗的处理器成为众多厂商追逐的目标,但是由于技术和工艺的瓶颈,试图在单核处理器上达到这样的目标变得越发困难,于是人们提出了多核处理器的概念.多核处理 ...

  6. node.js querystring类介绍

    querystring 模块提供了一些实用函数,用于解析与格式化 URL 查询字符串. 使用以下方法引入: const querystring = require('querystring'); 此类 ...

  7. CAD交互绘制样条线(com接口)

    在CAD设计时,需要绘制样条线,用户可以设置样条线线重及颜色等属性. 主要用到函数说明: _DMxDrawX::SendStringToExecuteFun 把命令当着函数执行,可以传参数.详细说明如 ...

  8. 笔试算法题(29):判断元素范围1到N的数组是否有重复数字 & 计算整数的7倍

    出题:一个长度为N的数组,其中的元素取值范围是1到N,要求快速判断数组是否存在重复数字: 分析: 解法1:如果N个元素的范围都是在1到N,所以如果没有重复元素,则每一个位置恰好可以对应数组中的一个元素 ...

  9. Hibernate-02

    一.hibernate实体创建规则 1.hibernate---->持久层ORM 映射框架,专注于数据的持久化工作. 2.持久化类创建规则 --->1.提供无参数的构造方法 2.私有化.对 ...

  10. [Python3网络爬虫开发实战] 1.4.2-MongoDB安装

    MongoDB是由C++语言编写的非关系型数据库,是一个基于分布式文件存储的开源数据库系统,其内容存储形式类似JSON对象,它的字段值可以包含其他文档.数组及文档数组,非常灵活. MongoDB支持多 ...