我正在使用 jsonschema2pojo 从我的 JSON 模式生成 POJO。但是,当我使用命名枚举时,它似乎不起作用。而不是 POJO 中的键值对,它只是添加__EMPTY__
.
我指定枚举的方式有问题还是 jsonschema2pojo 有问题?
JSON模式:
{
"type": "object",
"$schema": "http://json-schema.org/draft-04/schema",
"description": "Status identifier",
"properties": {
"status": {
"type": "string",
"enum": [
{"ACTIVE" : 0},
{"INACTIVE" : 1}
],
"description": "Defines whether schedule is active"
}
}
}
生成的 Java POJO
import java.util.HashMap;
import java.util.Map;
import javax.annotation.Generated;
import com.fasterxml.jackson.annotation.JsonAnyGetter;
import com.fasterxml.jackson.annotation.JsonAnySetter;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
import com.fasterxml.jackson.annotation.JsonValue;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
/**
* Status identifier
*
*/
@JsonInclude(JsonInclude.Include.NON_NULL)
@Generated("org.jsonschema2pojo")
@JsonPropertyOrder({
"status"
}
) public class Testenum {
/**
* Defines whether schedule is active
*
*/
@JsonProperty("status")
private Testenum.Status status;
@JsonIgnore
private Map<String, Object> additionalProperties=new HashMap<String, Object>();
/**
* Defines whether schedule is active
*
* @return
* The status
*/
@JsonProperty("status")
public Testenum.Status getStatus() {
return status;
}
/**
* Defines whether schedule is active
*
* @param status
* The status
*/
@JsonProperty("status")
public void setStatus(Testenum.Status status) {
this.status=status;
}
@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() {
return new HashCodeBuilder().append(status).append(additionalProperties).toHashCode();
}
@Override
public boolean equals(Object other) {
if (other==this) {
return true;
}
if ((other instanceof Testenum)==false) {
return false;
}
Testenum rhs=((Testenum) other);
return new EqualsBuilder().append(status,
rhs.status).append(additionalProperties,
rhs.additionalProperties).isEquals();
}
@Generated("org.jsonschema2pojo")
public static enum Status {
__EMPTY__("", "");
private final String value;
private static Map<String, Testenum.Status> constants=new HashMap<String, Testenum.Status>();
static {
for (Testenum.Status c: values()) {
constants.put(c.value, c);
}
}
private Status(String value) {
this.value=value;
}
@JsonValue
@Override
public String toString() {
return this.value;
}
@JsonCreator
public static Testenum.Status fromValue(String value) {
Testenum.Status constant=constants.get(value);
if (constant==null) {
throw new IllegalArgumentException(value);
}
else {
return constant;
}
}
}
}
注意 - 如果我删除枚举名称并仅指定如下值,则效果很好:
{
"type": "object",
"$schema": "http://json-schema.org/draft-04/schema",
"description": "Status identifier",
"properties": {
"status": {
"type": "string",
"enum": [
"ACTIVE" ,
"INACTIVE"
],
"description": "Defines whether schedule is active"
}
}
}