问题描述
我正在尝试使用jsonschema2pojo生成Java对象,但是我的对象数组只是生成List<Object>
而不是新的映射对象。我需要提供配置设置吗?
在下面的示例中,我期望一个OtherLanguages
POJO和一个public List<Object> otherLanguages;
字段。
示例JSON:
{
"firstName": "testfirst","lastName": "testlast","birthCountry": {
"value": 3,"label": "Afghanistan (AF)"
},"otherLanguages": [{
"value": 218,"label": "Uzbek (UZB)"
},{
"value": 216,"label": "Ukrainian (UKR)"
}
]
}
结果模式(使用https://jsonschema.net生成):
{
"$schema": "http://json-schema.org/draft-07/schema","$id": "http://example.com/example.json","type": "object","title": "The root schema","properties": {
"firstName": {
"$id": "#/properties/firstName","type": "string","title": "The firstName schema"
},"lastName": {
"$id": "#/properties/lastName","title": "The lastName schema"
},"birthCountry": {
"$id": "#/properties/birthCountry","title": "The birthCountry schema","properties": {
"value": {
"$id": "#/properties/birthCountry/properties/value","type": "integer","title": "The value schema"
},"label": {
"$id": "#/properties/birthCountry/properties/label","title": "The label schema"
}
},"additionalProperties": false
},"otherLanguages": {
"$id": "#/properties/otherLanguages","type": "array","title": "The otherLanguages schema","items": {
"$id": "#/properties/otherLanguages/items","anyOf": [
{
"$id": "#/properties/otherLanguages/items/anyOf/0","title": "The first anyOf schema","properties": {
"value": {
"$id": "#/properties/otherLanguages/items/anyOf/0/properties/value","title": "The value schema"
},"label": {
"$id": "#/properties/otherLanguages/items/anyOf/0/properties/label","title": "The label schema"
}
},"additionalProperties": false
}
]
}
}
},"additionalProperties": false
}
生成的POJO(来自http://www.jsonschema2pojo.org/网站,未选择任何选项)
-----------------------------------com.example.BirthCountry.java-----------------------------------
package com.example;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
/**
* The birthCountry schema
* <p>
*
*
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"value","label"
})
public class BirthCountry {
/**
* The value schema
* <p>
*
*
*/
@JsonProperty("value")
public Integer value;
/**
* The label schema
* <p>
*
*
*/
@JsonProperty("label")
public String label;
}
-----------------------------------com.example.Example.java-----------------------------------
package com.example;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
/**
* The root schema
* <p>
*
*
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"firstName","lastName","birthCountry","otherLanguages"
})
public class Example {
/**
* The firstName schema
* <p>
*
*
*/
@JsonProperty("firstName")
public String firstName;
/**
* The lastName schema
* <p>
*
*
*/
@JsonProperty("lastName")
public String lastName;
/**
* The birthCountry schema
* <p>
*
*
*/
@JsonProperty("birthCountry")
public BirthCountry birthCountry;
/**
* The otherLanguages schema
* <p>
*
*
*/
@JsonProperty("otherLanguages")
public List<Object> otherLanguages = null;
}
解决方法
在创建JSON模式时将数组验证更改为First
,然后它将成为严格的对象。