jsonchema2pojo: Как ограничения minLength, maxLength применяются к сгенерированному классу Java Pojo? - PullRequest
0 голосов
/ 09 октября 2019

Я хочу знать, как границы, представленные в схеме JSON, преобразуются в класс Java POJO?

Например, ниже приведено содержимое файла definitions.json -

{
"definitions": {

    "address": {
        "type": "object",
        "properties": {
            "street": { "type": "string", "minLength" : 30, "maxLength" : 100 },
            "city": { "type": "string", "minLength" : 30, "maxLength" : 100 },
            "state": { "type": "string", "minLength" : 30, "maxLength" : 100  }
        }
}

}
}

Приведенная выше схема json преобразована в класс pojo с помощью утилиты jsonschema2pojo, как показано ниже -

@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
    "street",
    "city",
    "state"
})
public class Address {

    @JsonProperty("street")
    private String street;
    @JsonProperty("city")
    private String city;
    @JsonProperty("state")
    private String state;
    @JsonIgnore
    private Map<String, Object> additionalProperties = new HashMap<String, Object>();

    /**
     * 
     * @return
     *     The street
     */
    @JsonProperty("street")
    public String getStreet() {
        return street;
    }

    /**
     * 
     * @param street
     *     The street
     */
    @JsonProperty("street")
    public void setStreet(String street) {
        this.street = street;
    }

    /**
     * 
     * @return
     *     The city
     */
    @JsonProperty("city")
    public String getCity() {
        return city;
    }

    /**
     * 
     * @param city
     *     The city
     */
    @JsonProperty("city")
    public void setCity(String city) {
        this.city = city;
    }

    /**
     * 
     * @return
     *     The state
     */
    @JsonProperty("state")
    public String getState() {
        return state;
    }

    /**
     * 
     * @param state
     *     The state
     */
    @JsonProperty("state")
    public void setState(String state) {
        this.state = state;
    }

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }

    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
        return this.additionalProperties;
    }

    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
        this.additionalProperties.put(name, value);
    }

    @Override
    public int hashCode() {
        ..... Generated implementation
    }

    @Override
    public boolean equals(Object other) {
        .....Generated Implementation
    }

}

Теперь мы не видим, чтобы границы minLength и maxLength были реализованы где-либо в классе pojo.

Мои вопросы: игнорируются ли границы при преобразовании в Java Pojo? Есть ли способ сделать эти границы учтенными в классе pojo?

Кроме того, определение схемы JSON может иметь шаблон для проверки значения узла, например -

    {
    "type": "object",
    "properties": {
        "name": {
        "type": "string",
        "pattern": "^[xX]?[0-9a-fA-F]{32}$"
        },
        "address": { "$ref": "definations.json#/definitions/address" }

    }
}

шаблон игнорируется при преобразовании в класс Java Java? Есть ли способ сделать эти шаблоны учитываемыми в классе Java POJO?

1 Ответ

0 голосов
/ 09 октября 2019

Значение minLength / maxLength должно быть в двойных кавычках.

См. Пример, приведенный в документации , для значения по умолчанию: { "type":"integer", "default":"100"}

ДляВ случае с шаблоном проверьте наличие подключаемого модуля Maven, задачи CLI и Ant, которые позволяют активировать аннотации JSR-303 через аргумент config.

При активации будут сгенерированы следующие аннотации JSR-303:

Правило схемы Максимум аннотаций @DecimalMax минимум @ Десятичных мин minItems, maxItems @Size minLength, maxLength @Size pattern @Pattern...

...