如何解决与POJO + Jackson具有相同名称和不同类型的anyOf字段的Json模式
如果具有组件A的架构包含包含两个项目的AnyOf节。它们之间的区别是,在一种情况下,子组件C是数组,而在另一个C中,子组件C是对象,但是它们具有相同的名称B。如果我有两个Java对象,可以用jackson处理它吗?
我在考虑是否可以在带有一些注释的界面上使用,杰克逊将确定正确的对象...
"A": {
"type": "object","anyOf": [
{
"properties": {
"B": {
"type": "array","items": {
"type": "object","$ref": "#/components/schemas/C"
}
}
},"additionalProperties": false
},{
"properties": {
"B": {
"type": "object","$ref": "#/components/schemas/C"
}
},"additionalProperties": false
}
]
}
假设我在Java中有这个
public class AAnyOf1 {
@JsonProperty("B")
private List<C> b = new ArrayList<>();
...
}
public class AAnyOf2 {
@JsonProperty("B")
private C b = null;
...
}
解决方法
在发送JSON Object
而不是JSON Array
和一个JSON Object
的情况下,这是一种非常流行的模式。因此,代替:
{
"b": [
{
"id": 1
}
]
}
API
响应如下:
{
"b": {
"id": 1
}
}
Jackson
已处理此用例。您需要启用ACCEPT_SINGLE_VALUE_AS_ARRAY功能,并且只需要一个POJO
版本:
class AAnyOf {
@JsonProperty("B")
private List<C> b;
...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。