Jackson serializando Enumerate

Dada uma classe Property que possui um Enumerate chamado PropertyType para identificar seu tipo, se é propriedade do sistema, ou do ambiente, ou mesmo se é configuração da aplicação. O retorno default do json é o nome do tipo:


public class Property {
private PropertyType type;
public PropertyType getType() {
return type;
}
}

view raw

Property.java

hosted with ❤ by GitHub


public enum PropertyType {
SYSTEM_PROPERTY(0), SYSTEM_ENVYRONMENT(1) ,APPLICATION_CONFIGURATION(2);
private int value;
PropertyType(int value) {
this.value = value;
}
}


{"type": "SYSTEM_PROPERTY"}

view raw

return.json

hosted with ❤ by GitHub

Podemos capturar o valor numérico do tipo e retorná-lo através da annotation @JsonFormat:


public class Property {
private PropertyType type;
@JsonFormat(shape = JsonFormat.Shape.NUMBER_FLOAT)
public PropertyType getType() {
return type;
}
}

view raw

Property.java

hosted with ❤ by GitHub


public enum PropertyType {
SYSTEM_PROPERTY(0), SYSTEM_ENVYRONMENT(1) ,APPLICATION_CONFIGURATION(2);
private int value;
PropertyType(int value) {
this.value = value;
}
}


{"type": 0}

view raw

return.json

hosted with ❤ by GitHub

Se tivéssemos em nosso Enum mais valores descritivos para cada tipo, poderiamos retornar o objeto inteiro:


public class Property {
private PropertyType type;
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public PropertyType getType() {
return type;
}
}

view raw

Property.java

hosted with ❤ by GitHub


public enum PropertyType {
SYSTEM_PROPERTY(0, "Propriedades do sistema"), SYSTEM_ENVYRONMENT(1, "Propriedades do ambiente"), APPLICATION_CONFIGURATION(2, "Configuração da aplicaçaõ");
private int codigo;
private String descricao;
PropertyType(int codigo, String descricao) {
this.codigo = codigo;
this.descricao = descricao;
}
}


{"type": {"codigo": 0,"descricao":"Propriedades do sistema"}}

view raw

return.json

hosted with ❤ by GitHub

Ou poderíamos retornar apenas um dos valores através da annotation @JsonValue no método get:


public class Property {
private PropertyType type;
public PropertyType getType() {
return type;
}
}

view raw

Property.java

hosted with ❤ by GitHub


public enum PropertyType {
SYSTEM_PROPERTY(0, "Propriedades do sistema"), SYSTEM_ENVYRONMENT(1, "Propriedades do ambiente"), APPLICATION_CONFIGURATION(2, "Configuração da aplicaçaõ");
private int codigo;
private String descricao;
PropertyType(int codigo, String descricao) {
this.codigo = codigo;
this.descricao = descricao;
}
//…
@JsonValue
public String getDescricao() {
return descricao;
}
}


{"type": "Propriedades do sistema"}

view raw

return.json

hosted with ❤ by GitHub

Deixe um comentário