Liu*_*hen 5 java pojo jsonschema jackson jsonschema2pojo
我想知道为具有“anyOf”字段的 Json 模式生成 POJO 的推荐方法是什么?
例如,给定以下 json 模式:
爱好.json{
"anyOf": [
{ "type": {"$ref": "./exercise.json" } },
{ "type": {"$ref": "./music.json" } }
]
}
Run Code Online (Sandbox Code Playgroud)
练习.json
{
"type": "object"
"properties" {
"hobbyType": {"type": "string"}
"exerciseName": { "type": "string" },
"timeSpent": { "type": "number" },
"place": { "type": "string" }
}
}
Run Code Online (Sandbox Code Playgroud)
音乐.json
{
"type": "object"
"properties" {
"hobbyType": {"type": "string"}
"instrument": { "type": "string" },
"timeSpent": { "type": "number" }
}
}
Run Code Online (Sandbox Code Playgroud)
我如何为Hobby.javaJackson 生成 POJO?
我最终采用的方法是使用 Jackson 提供的多态编组/解组功能。
具体来说 -
hobby注释@JsonTypeInfo@JsonSubTypes@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
property = "hobbyType",
include = JsonTypeInfo.As.EXISTING_PROPERTY,
visible = true
)
@JsonSubTypes({
@Type(value = Exercise.class, name = "exercise"),
@Type(value = Music.class, name = "music")
})
public interface Hobby {
}
Run Code Online (Sandbox Code Playgroud)
Exercise.java并Music.java实现该接口@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
property = "hobbyType",
include = JsonTypeInfo.As.EXISTING_PROPERTY,
visible = true
)
@JsonSubTypes({
@Type(value = Exercise.class, name = "exercise"),
@Type(value = Music.class, name = "music")
})
public interface Hobby {
}
Run Code Online (Sandbox Code Playgroud)
Hobby序列化和反序列化。// create a Hobby object
Hobby exercise = Exercise.builder().exerciseName("swimming").place("swimmingPool").build();
// serialization
String serializedHobby = new ObjectMapper.writeValueAsString(exercise)
/**
serializedHobby looks like this ->
{
"hobbyType": "exercise",
"exerciseName": "swimming",
"place": "swimmingPool"
}
*/
// deserialization
Hobby deserializedObject = new ObjectMapper.readValue(jsonString, Hobby.class)
// deserializedObject.getClass() would return Exercise.java or Music.java based on the hobbyType
Run Code Online (Sandbox Code Playgroud)
参考: https: //www.baeldung.com/jackson-inheritance
| 归档时间: |
|
| 查看次数: |
4375 次 |
| 最近记录: |