英文:
using jsonschema2pojo only creates List<Object>, nothing more complex
问题
我试图使用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",
"type": "string",
"title": "The lastName schema"
},
"birthCountry": {
"$id": "#/properties/birthCountry",
"type": "object",
"title": "The birthCountry schema",
"properties": {
"value": {
"$id": "#/properties/birthCountry/properties/value",
"type": "integer",
"title": "The value schema"
},
"label": {
"$id": "#/properties/birthCountry/properties/label",
"type": "string",
"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",
"type": "object",
"title": "The first anyOf schema",
"properties": {
"value": {
"$id": "#/properties/otherLanguages/items/anyOf/0/properties/value",
"type": "integer",
"title": "The value schema"
},
"label": {
"$id": "#/properties/otherLanguages/items/anyOf/0/properties/label",
"type": "string",
"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;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"value",
"label"
})
public class BirthCountry {
@JsonProperty("value")
public Integer value;
@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;
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"firstName",
"lastName",
"birthCountry",
"otherLanguages"
})
public class Example {
@JsonProperty("firstName")
public String firstName;
@JsonProperty("lastName")
public String lastName;
@JsonProperty("birthCountry")
public BirthCountry birthCountry;
@JsonProperty("otherLanguages")
public List<Object> otherLanguages = null;
}
英文:
I'm trying to use jsonschema2pojo to generate java objects, but my array of objects is just producing a List<Object>
not a new, mapped object. Is there a config setting I need to provide?
In the below example, I was expecting an OtherLanguages
POJO, and a public List<Object> otherLanguages;
field.
example JSON:
{
"firstName": "testfirst",
"lastName": "testlast",
"birthCountry": {
"value": 3,
"label": "Afghanistan (AF)"
},
"otherLanguages": [{
"value": 218,
"label": "Uzbek (UZB)"
},
{
"value": 216,
"label": "Ukrainian (UKR)"
}
]
}
resulting schema (generated using 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",
"type": "string",
"title": "The lastName schema"
},
"birthCountry": {
"$id": "#/properties/birthCountry",
"type": "object",
"title": "The birthCountry schema",
"properties": {
"value": {
"$id": "#/properties/birthCountry/properties/value",
"type": "integer",
"title": "The value schema"
},
"label": {
"$id": "#/properties/birthCountry/properties/label",
"type": "string",
"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",
"type": "object",
"title": "The first anyOf schema",
"properties": {
"value": {
"$id": "#/properties/otherLanguages/items/anyOf/0/properties/value",
"type": "integer",
"title": "The value schema"
},
"label": {
"$id": "#/properties/otherLanguages/items/anyOf/0/properties/label",
"type": "string",
"title": "The label schema"
}
},
"additionalProperties": false
}
]
}
}
},
"additionalProperties": false
}
generated POJOs (from the http://www.jsonschema2pojo.org/ site, no options selected)
-----------------------------------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;
}
答案1
得分: 1
将创建 JSON Schema 时的数组验证更改为 First
,然后它将变成一个严格的对象。
英文:
Change Array Validation to First
when creating JSON Schema, then it will become a strict object.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论