【发布时间】:2018-11-17 01:10:44
【问题描述】:
我在使用自定义 com.fasterxml.jackson.databind.JsonDeserializer 反序列化器实现将 HTTP 请求值反序列化为枚举时遇到问题:
public class EnvelopeColorJsonDeserializer extends JsonDeserializer<EnvelopeColor> {
@Override
public EnvelopeColor deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
String val = p.getValueAsString();
return EnvelopeColor.fromCode(val);
}
}
这就是我将值转换为枚举的方式:
public static EnvelopeColor fromCode(String code) {
Assert.notNull(code, "code");
for (EnvelopeColor type : values()) {
if (code.equals(type.code)) {
return type;
}
}
throw new RuntimeException("Not supported color: " + code);
}
端点:
@PostMapping("/")
public @ResponseBody
ResponseEntity add(@RequestBody EnvelopeDto envelope) {
// some stuff goes here...
}
问题
有什么方法可以 a) 检查 HTTP 请求值是否是有效的枚举常量值 去反序列化过程或 b) 如何在@ControllerAdvice 异常处理程序中捕获异常? (我想避免在fromCode() 方法中抛出自定义异常)。
【问题讨论】:
-
您的请求是如何定义的? (您的端点)
-
@VeselinDavidov 添加了
-
视情况而定。在您的应用程序的正常过程中,您会期待未知的颜色吗?如果是这样,您最好为此定义一个枚举常量。如果不是,则在 fromCode 方法中抛出异常是正确的,因为这是意外行为。
-
分享信封到详情
标签: java spring-boot jackson json-deserialization