gpt4 book ai didi

java - 如何检索 Jackson @JsonDeserialize 注解的类?

转载 作者:行者123 更新时间:2023-12-01 09:24:39 35 4
gpt4 key购买 nike

我的任务是将 json 对象反序列化为枚举。请参阅页面末尾的示例。

但我无法定义在方法 JsonEnumDeserializer.deserialize 中创建哪个枚举(驱动器或其他)。

我只想注释我的枚举 @JsonDeserialize(using = JsonEnumDeserializer.class)它应该按照我描述的方式反序列化所有带注释的枚举。

1)为此我尝试扩展 org.codehaus.jackson.map.deser.std.EnumDeserializer但它在运行时失败,不需要参数构造函数,或者在编译时失败,需要覆盖父构造函数 EnumDeserializer(EnumResolver<?> res) 。我尝试深入研究 EnumDeserializer它如何检索枚举类,但它没有给我任何结果。

2)其他解决方案将字段“type”添加到json,但这是一个糟糕的解决方案。

在方法JsonEnumDeserializer.deserialize中我想检索由 @JsonDeserialize 注释的类(它会解决问题)。有人可以帮助我吗?

{
"make":"Mazda",
"model":"6",
"drive":{
"id":"FWD",
"name":"Front wheel drive"
}
}

public class Car {
private String make;
private String model;
private Drive drive;

/* setters and getters */
}

@JsonDeserialize(using = JsonEnumDeserializer.class)
public enum Drive {
FWD, RWD, AWD
}

public class JsonEnumDeserializer extends JsonDeserializer<Enum> {
@Override
public Enum deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException, JsonProcessingException {
String enumName = jp.readValueAsTree().findValue("id").asText();
return ??? /* Knowing enumName how can I figure out which enum Class return? Drive enum or other enum? I want write universal deserializer for all enum */
}
}

最佳答案

我发现的一个解决方案是将 Jackson 更改为 Gson。 Gson 可以说出预期返回哪个类的实例。参数类型类型

public class GsonEnumDeserializer implements JsonDeserializer<Enum> {
@Override
public Enum deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException {
try {
Class enumClass = Class.forName(type.getTypeName());
String enumName = jsonElement.getAsJsonObject().get("id").getAsString();
return (Enum) enumClass.getMethod("valueOf", String.class).invoke(null, enumName);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}

/* usage */
Gson gson = new GsonBuilder()
.registerTypeHierarchyAdapter(Enum.class, new GsonEnumDeserializer())
.create();
Car car = gson.fromJson(carJson, Car.class);

关于java - 如何检索 Jackson @JsonDeserialize 注解的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39935818/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com