带anyOf字段的Json模式到java记录



如何为anyOf字段的java模式生成java记录对象?

我有以下模式:

animals.json

{
"type": "object",
"properties": {
"animals": {
"type": "array",
"items": {
"anyOf": [
{"$ref": "mammale.json"},
{"$ref": "bird.json"}
],
"minContains": 1,
"uniqueItems": true
}
}
}
}

mammal.json

{
"type": "object",
"properties": {
"mammalType": {"type": "string"},
"furColor": {"type": "string"}
}
}

bird.json

{
"type": "string"
}

我想输出一个json,看起来像这样:

{
"animals": [
{
"mammalType": "dog",
"furColour": "brown"
},
"someBirdsName"
]
}

是否有推荐的方法来表示'anyOf'结构在java记录(最好与杰克逊注释)?

我在使用pojo时找到了一个解决方案,它们使用接口:带anyOf字段的POJO Json模式

这看起来像一个很好的解决方案,但是我如何使用一个不实现接口的任意字符串?

生成如下json:

{
"animals" : [ {
"mammalType" : "dog",
"furColour" : "brown"
}, 
"someString"
]
}

对应如下模式:

{
"type": "object",
"properties": {
"animals": {
"type": "array",
"items": {
"anyOf": [
{"$ref": "mammale.json"},
{"type": "String"}
],
"minContains": 1,
"uniqueItems": true
}
}
}
}

那么下面的命令就可以了:

public record ResponseServiceAlgolia(Object[] animals) {}
public record Mammal(String mammalType, String furColour) {}
public static void main(String[] args) throws JsonProcessingException {

Mammal mammal = new Mammal("dog", "brown");

Object[] animals = new Object[] {mammal, "someString"};
ResponseServiceAlgolia responseServiceAlgolia = new ResponseServiceAlgolia(animals);

ObjectMapper objectMapper = JsonMapper.builder().enable(SerializationFeature.INDENT_OUTPUT).build();

var json = objectMapper.writeValueAsString(responseServiceAlgolia);
System.out.println(json);
}

输出:

{
"animals" : [ {
"mammalType" : "dog",
"furColour" : "brown"
}, "someString" ]
}

最新更新