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;
}
Change Array Validation to First
when creating JSON Schema, then it will become a strict object.