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;
}
}

view raw
PropertyType.java
hosted with ❤ by GitHub

{"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;
}
}

view raw
PropertyType.java
hosted with ❤ by GitHub

{"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;
}
}

view raw
PropertyType.java
hosted with ❤ by GitHub

{"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;
}
}

view raw
PropertyType.java
hosted with ❤ by GitHub

{"type": "Propriedades do sistema"}

view raw
return.json
hosted with ❤ by GitHub

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s