首页 > 解决方案 > 在 Spring Boot 中处理 javax.validation.ConstraintViolationException

问题描述

嗨,我是 spring boot 的新手。当我尝试从邮递员提交请求时,它返回org.springframework.transaction.TransactionSystemExceptionHttpStatus 代码:500如果无效,它会在服务器中抛出 javax.validation.ConstraintViolationException。任何人都可以分享处理这些异常的最佳解决方案吗?我在控制器中尝试了以下代码:

@ExceptionHandler(ConstraintViolationException.class)
  @ResponseStatus(HttpStatus.BAD_REQUEST)
  ResponseEntity<String> handleConstraintViolationException(ConstraintViolationException e) {
    return new ResponseEntity<>("not valid due to validation error: " + e.getMessage(), HttpStatus.BAD_REQUEST);
  }

但我希望响应以 Json 格式发送,并带有自定义错误消息我该如何实现?

并且还想避免控制器中的异常处理代码。有没有更好的方法?

标签: javaspringspring-boot

解决方案


500是服务器问题。这意味着您的服务器在执行代码时遇到问题。具体来说,它是ConstraintViolationException,这意味着您在将数据插入数据库时​​有一个约束。

示例:假设我们有一个具有唯一字段的实体

@Entity
user {
   UUID id;
   @column
   String name;
}

并且在创建实体时,您在数据库中设置了唯一性约束:

ALTER TABLE USER
ADD CONSTRAINT UC_name UNIQUE (name);

在这里,如果您尝试插入两个具有相同名称的用户,您将收到一个ConstraintViolationException


推荐阅读