jsonchema2pojo: Как ограничения minLength, maxLength применяются к сгенерированному классу Java Pojo?

Я хочу знать, как границы, указанные в схеме 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 pojo? Есть ли способ сделать эти шаблоны учтенными в классе Java POJO?


person Gunwant    schedule 09.10.2019    source источник


Ответы (1)


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

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

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

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

Правило схемы Аннотации максимум @DecimalMax минимум @DecimalMin minItems,maxItems @Size minLength,maxLength @Size шаблон @Pattern ...

person TiyebM    schedule 09.10.2019
comment
Согласно json-schema.org/understanding-json-schema/reference/ string.html этой документации, minLength и maxLength не требуют кавычек. - person Gunwant; 09.10.2019
comment
Хорошо, после активации JSR-303 создается pojo с ограниченными аннотациями. stackoverflow.com/questions/39875725/ это ответ объясняет, как включить JSR-303. - person Gunwant; 09.10.2019