【发布时间】:2019-02-11 05:51:18
【问题描述】:
我知道这里有一些类似的问题,关于如何解析 ENUM,如何解析自定义 JSON 结构。但在这里我的问题是,当用户提交的 JSON 与预期不符时,如何提供更好的消息。
这是代码:
@PutMapping
public ResponseEntity updateLimitations(@PathVariable("userId") String userId,
@RequestBody LimitationParams params) {
Limitations limitations = user.getLimitations();
params.getDatasets().forEach(limitations::updateDatasetLimitation);
params.getResources().forEach(limitations::updateResourceLimitation);
userRepository.save(user);
return ResponseEntity.noContent().build();
}
而我期望的请求正文是这样的:
{
"datasets": {"public": 10},
"resources": {"cpu": 2}
}
但是当他们提交这样的内容时:
{
"datasets": {"public": "str"}, // <--- a string is given
"resources": {"cpu": 2}
}
响应将在日志中显示如下内容:
400 JSON parse error: Cannot deserialize value of type `java.lang.Integer` from String "invalid": not a valid Integer value; nested exception is com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.lang.Integer` from String "invalid": not a valid Integer value
在 [Source: (PushbackInputStream); line: 1, column: 23](通过引用链:com.openbayes.api.users.LimitationParams["datasets"]->java.util.LinkedHashMap["public"])
但我想要的是更易读的信息。
我尝试将ExceptionHandler 用于com.fasterxml.jackson.databind.exc.InvalidFormatException,但它不起作用。
【问题讨论】:
标签: java spring-mvc spring-boot exception-handling jackson