java - 在 Spring Boot 中处理 javax.validation.ConstraintViolationException
问题描述
嗨,我是 spring boot 的新手。当我尝试从邮递员提交请求时,它返回org.springframework.transaction.TransactionSystemException和HttpStatus 代码: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 格式发送,并带有自定义错误消息我该如何实现?
并且还想避免控制器中的异常处理代码。有没有更好的方法?
解决方案
500是服务器问题。这意味着您的服务器在执行代码时遇到问题。具体来说,它是ConstraintViolationException,这意味着您在将数据插入数据库时有一个约束。
示例:假设我们有一个具有唯一字段的实体
@Entity
user {
UUID id;
@column
String name;
}
并且在创建实体时,您在数据库中设置了唯一性约束:
ALTER TABLE USER
ADD CONSTRAINT UC_name UNIQUE (name);
在这里,如果您尝试插入两个具有相同名称的用户,您将收到一个ConstraintViolationException
推荐阅读
- arrays - 运行时错误“13”:显示来自 JSON 数组的数据时出现类型不匹配错误
- html - 导航栏下拉菜单,导航栏登录链接无效,但下拉菜单链接有效
- c# - Workbooks.Open 函数忽略设置分隔符
- python - ModuleNotFoundError:没有名为“QWebEngineView”的模块
- c# - 启用 Microsoft.AspNetCore 命名空间的 DEBUG 级别日志
- c++ - 是否有适用于方法的 offsetof 版本?
- node.js - 请求和响应功能。节点
- c++ - 如何设置 char [ ] 以便在我们输入任何字符或不输入任何字符时都会给出输出。代码如下
- reactjs - 反应谷歌地图没有在指定的纬度,经度上打开,而是在随机的地方
- javascript - 当我要在 js 中创建一个机器人并且我无法修复它时,会发生此错误。有人能帮我吗?