我有一个POJO,其中一个字段使用hibernate映射:
@Enumerated(EnumType.STRING)
@Column(name = "status")
private UserStatus status;
枚举只有两个可能的值:已激活和已停用
在我的控制器中,我有以下简单方法可将实体保存在db中:
@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\"])",
如何处理不存在的值的序列化?在这种情况下,我想抛出一个自定义异常。谢谢!
答案 0 :(得分:1)
您可以像在控制器中添加ExceptionHandler一样
@ResponseStatus(value = HttpStatus.BAD_REQUEST)
@ExceptionHandler(HttpMessageNotReadableException.class)
public ResponseEntity handleException() {
// create custom error response
}`
或者如果您想处理这种情况,对于所有控制器,都可以使用ControllerAdvice。