spring - Hibernate 验证 @Enumerated(EnumType.STRING) 字段
问题描述
我有一个 POJO,其中一个字段使用休眠映射:
@Enumerated(EnumType.STRING)
@Column(name = "status")
private UserStatus status;
枚举只有 2 个可能的值:Activated 和 Deactivated
在我的控制器中,我有一个将实体保存在数据库中的简单方法:
@PostMapping("/save")
private UserDto saveUser(@RequestBody User user){
return userService.save(user);
}
如果我尝试保存不存在的用户,则会UserStatus
收到以下错误消息:
"message": "JSON parse error: Cannot deserialize value of type `com.example.demo.utils.UserStatus` from String \"Deactivated1\": value not one of declared Enum instance names: [Deactivated, Activated]; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `com.example.demo.utils.UserStatus` from String \"Deactivated1\": value not one of declared Enum instance names: [Deactivated, Activated]\n at [Source: (PushbackInputStream); line: 3, column: 12] (through reference chain: com.example.demo.entity.User[\"status\"])",
如何处理不存在值的序列化?在这种情况下,我想抛出一个自定义异常。谢谢!
解决方案
您可以在控制器中添加一个 ExceptionHandler ,例如
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseEntity handleException() {
// create custom error response
}`
或者,如果您想在一般情况下处理这种情况,对于所有控制器,您可以使用 ControllerAdvice。
推荐阅读
- laravel - 如何在 laravel 中使用队列发送邮件和通知时更改邮件设置
- azure-active-directory - 乏味:Azure AD with accessToken Connection lost - 读取 ECONNRESET
- c++ - 来自多个线程的 stable_clock::now 的值是否与内存顺序一致?
- python - 名称未定义,即使使用全局变量?
- python - 我需要在此 python 代码中进行哪些更改才能将 DNA 序列转换为蛋白质?
- rust - move 发生是因为 value 的类型为 `RefCell<...>`,它没有实现 `Copy` 特征
- sql - 如何使用 sys.anydataset sql oracle 19c
- r - 创建一个显示当前日期和下一个日期的变量
- python - 如何使用 pandas cut 绘制直方图
- reactjs - 来自反应应用程序的发布请求不起作用