@Entity
@EntityListeners(AuditingEntityListener.class)
@Table(name = "profile")
public class Profile extends AuditableEntity {
private static final long serialVersionUID = 8744243251433626827L;
@Column(name = "email", nullable = true, length = 250)
@NotNull
@Pattern(regexp = "^([^ @])+@([^ \\.@]+\\.)+([^ \\.@])+$")
@Size(max = 250)
private String email;
....
}
ValidationExceptionHandler.java
@ControllerAdvice
public class ValidationExceptionHandler extends ResponseEntityExceptionHandler {
private MessageSource messageSource;
@Autowired
public ValidationExceptionHandler(MessageSource messageSource) {
this.messageSource = messageSource;
}
@ExceptionHandler(ConstraintViolationException.class)
public ResponseEntity<Object> handleConstraintViolation(ConstraintViolationException ex,
WebRequest request) {
List<String> errors = new ArrayList<String>();
....
}
}
当我运行我的代码并传递无效的电子邮件地址时,我会得到以下异常。从不执行HandleConstraintVilvation中的代码。异常中返回的http状态是500,但我想返回400。你知道我怎么才能做到吗?
2017-07-12 22:15:07.078 ERROR 55627 --- [nio-9000-exec-2] o.h.c.s.u.c.UserProfileController : Validation failed for classes [org.xxxx.common.service.user.domain.Profile] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='must match "^([^ @])+@([^ \.@]+\.)+([^ \.@])+$"', propertyPath=email, rootBeanClass=class org.xxxx.common.service.user.domain.Profile, messageTemplate='{javax.validation.constraints.Pattern.message}'}]
javax.validation.ConstraintViolationException: Validation failed for classes [org.xxxx.common.service.user.domain.Profile] during persist time for groups [javax.validation.groups.Default, ]
List of constraint violations:[
ConstraintViolationImpl{interpolatedMessage='must match "^([^ @])+@([^ \.@]+\.)+([^ \.@])+$"', propertyPath=email, rootBeanClass=class org.xxxx.common.service.user.domain.Profile, messageTemplate='{javax.validation.constraints.Pattern.message}'}]
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.validate(BeanValidationEventListener.java:138)
at org.hibernate.cfg.beanvalidation.BeanValidationEventListener.onPreInsert(BeanValidationEventListener.java:78)
您无法捕获ConstraintViolationException.class
,因为它没有传播到代码的该层,而是由较低的层捕获,包装并重新抛出到另一个类型下。以便击中web层的异常不是ConstraintViolationException
。
在我的示例中,它是TransactionSystemException
。我正在使用Spring中的@transaction
注释和JPatransactionManager
。当事务中出现问题时,EntityManager会引发回滚异常,该异常由JPatransActionManager
转换为TransactionSystemException
。
所以你可以这样做:
@ExceptionHandler({ TransactionSystemException.class })
public ResponseEntity<RestResponseErrorMessage> handleConstraintViolation(Exception ex, WebRequest request) {
Throwable cause = ((TransactionSystemException) ex).getRootCause();
if (cause instanceof ConstraintViolationException) {
Set<ConstraintViolation<?>> constraintViolations = ((ConstraintViolationException) cause).getConstraintViolations();
// do something here
}
}
主要内容:文章目录,1.用户登录权限效验,2.统一异常处理,3.统一数据返回格式统⼀⽤户登录权限验证 统⼀数据格式返回 统⼀异常处理 1.用户登录权限效验 1.1 最初的用户登录验证 每个⽅法中都要单独写⽤户登录验证的⽅法,即使封装成公共⽅法,也⼀样要传参调⽤和在⽅法中进⾏判断。 添加控制器越多,调⽤⽤户登录验证的⽅法也越多,这样就增加了后期的修改成本和维护成本。 1.2 Spring AOP 用户统一登录验证的问题 没办法获取到 HttpSession 对象。 要对⼀部分⽅
我相信这是一个简单的问题,但我找不到答案或至少在搜索中使用正确的术语。 我正在一起设置和。默认情况下,将使用和等路径。 如果可能的话,我希望避免使用path作为哈希。正如Angular文档所述: 路由器的provideRouter函数将LocationStrategy设置为PathLocationStrategy,使其成为默认策略。如果我们愿意,我们可以在引导过程中切换到带有重写的HashLoca
问题内容: 我相信这是一个简单的问题,但我找不到答案,或者至少在搜索中使用正确的字词。 我正在设置并在一起。默认情况下,Angular将使用和之类的路径。 如果可能的话,我想避免使用path作为哈希值。如Angular 文档所述: 路由器的r函数将设置为,使其成为默认策略。如果愿意,我们可以在引导过程中使用覆盖切换到。 然后… 几乎所有Angular 2项目都应使用默认的HTML 5样式。它产生的
本文向大家介绍springboot全局异常处理详解,包括了springboot全局异常处理详解的使用技巧和注意事项,需要的朋友参考一下 一、单个controller范围的异常处理 说明: 在controller中加入被@ExceptionHandler修饰的类即可(在该注解中指定该方法需要处理的那些异常类) 该异常处理方法只在当前的controller中起作用 二、全部controller范围内起
springboot全局异常处理器处理顺序问题 在使用异常处理器时,代码 当出现数据库异常时,返回 按理说越精确优先级越高,SQLIntegrityConstraintViolationException继承SQLException,为什么返回的却是被Exception异常捕获?求解答 我尝试注释Exception异常捕获,此时异常能被SQLException捕获
本文向大家介绍java springboot poi 从controller 接收不同类型excel 文件处理,包括了java springboot poi 从controller 接收不同类型excel 文件处理的使用技巧和注意事项,需要的朋友参考一下 根据poi接收controller层的excel文件导入 可使用后缀名xls或xlsx格式的excel。 1.pom引入 2.Ex