【发布时间】:2017-05-29 09:18:16
【问题描述】:
我有一个 POJO 类,例如:
class Cat {
public Cat() {}
private String name;
private JsonElement arbitraryProperties;
}
我正在使用 Jackson (JAXB),cat 是我要导入和导出的资源。
GET /cats/{id}
POST /cats
导出工作正常。导入不起作用,因为 JsonElement 是抽象的。所以我在arbitraryProperties field 中添加了@JsonDeserialize(using = MyJsonElementDeserialize.class) 注释。
MyJsonElementDeserialize 类看起来像:
public class JsonElementDeserialize extends JsonDeserializer<JsonElement> {
public JsonElementDeserialize() {
}
@Override
public JsonElement deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
return new JsonObject(); // here I need to create my object later
}
}
当我现在使用有效负载调用 POST /cats 时:
{
"name": "Mia",
"arbitraryProperties": {
"a": 3,
"b": [],
"c": {
"d": "race"
}
}
}
Jacksons 返回错误码 400:
无法识别的字段“a”(Cat 类),未标记为可忽略(1 个已知属性:“name”])。
我的错误在哪里?如何在我的 POJO 中有一个 JsonElement 自动序列化和反序列化?
【问题讨论】:
-
JsonElement是什么?它是 GSON 的一部分吗?那为什么不使用呢? -
是的,JsonElement 是来自 GSON 的抽象类。 google.github.io/gson/apidocs/com/google/gson/JsonElement.html
-
一个小建议:标题说“序列化”,但问题是关于“反序列化”。更改标题是有意义的,这样更容易找到相关问题。
标签: java json serialization jaxb jackson