我在使用JSON反序列化并将其映射到枚举时遇到问题。我从类似的外部API获取JSON到这两个示例:
{
"someValue": null
}
{
"someValue": "exists"
}
我想将空值映射到一些默认的枚举值。
模型对象
SomeEnum someValue;
和枚举类
public enum SomeEnum {
@JsonProperty("exists") EXISTS,
NONE;
}
对于存在值模型类包含正确的枚举,但是如果我从API获得空值,则它在模型中仍为空值。
我试图创建一个由@JsonCreator注释的方法,使用@JsonEnumDefaultValue创建自己的枚举解串器,但是这些解决方案都不适合我。谁知道,如何将空值反序列化为某些默认枚举?
(老实说,我在这里编写此代码而不进行测试,也许您需要对其进行一些修改)
您可以尝试执行以下操作(使用构造函数进行枚举并使用@JsonCreator):
public enum SomeEnum {
EXISTS("exists"),
NONE(null);
private String value;
SomeEnum (String value) {
this.value = value;
}
@JsonCreator
public static SomeEnum fromValue(String value) {
for (SomeEnum someEnum : SomeEnum.values()) {
if (StringUtils.equalsIgnoreCase(someEnum.getValue(), value)) {
return someEnum;
}
}
throw new IllegalArgumentException("Unknown value " + value);
}
public String getValue () {
return value;
}
}
如果不起作用,请保留上面的枚举,并尝试按以下方法制作自定义转换器(不带杰克逊)
如果使用弹簧靴,则应将此装订器放入控制器中
@InitBinder
public void initBinder(final WebDataBinder webdataBinder) {
webdataBinder.registerCustomEditor(SomeEnum.class, new SomeEnumConverter());
}
以下是自定义转换器,用于指定如何将输入值转换为枚举值。
public class SomeEnumConverter extends PropertyEditorSupport {
@Override
public void setAsText(final String text) {
setValue(SomeEnum.fromValue(text));
}
}