Página Inicial > geral, java, Springframework > Serializador Json personalizado para Enum

Serializador Json personalizado para Enum


Estou trabalhando num projeto com Springframework mvc onde os serviços rest são transportados em json.
Por padrão, a serialização para json é feita pelo framework Jackson que é muito bom diga-se de passagem, já que é bastante flexivel.
No meu problema de hoje precisei personalizar a serialização dos enums pois por padrão ele retorna o name do enum. É possivel por exemplo, adicionar a anotação @JsonValue para definir qual método retornará o valor desejado. No meu caso porém, eu precisava retornar o enum numa estrutura de pojo e não:


{
"name" : { "first" : "Joe", "last" : "Sixpack" },
"gender" : "MALE",
"verified" : false,
"userImage" : "Rm9vYmFyIQ=="
}

Para isso criei um serializador personalizado:


public class SimpleEnumSerializer extends JsonSerializer> {

@Override
public void serialize(Enum< ?> value, JsonGenerator jgen, SerializerProvider provider) throws IOException,
JsonProcessingException {
jgen.writeStartObject();
jgen.writeFieldName("ordinal");
jgen.writeNumber(value.ordinal());
jgen.writeFieldName("name");
jgen.writeString(value.name());
jgen.writeEndObject();
}
}

public class User {
private Gender _gender;
private Name _name;
private boolean _isVerified;
private byte[] _userImage;

@JsonSerialize(using = SimpleEnumSerializer.class)
public Gender getGender() { return _gender; }
}

com isso o resultado passa para:

{
"name" : { "first" : "Joe", "last" : "Sixpack" },
"gender" {"ordinal":0, "name":"MALE"},
"verified" : false,
"userImage" : "Rm9vYmFyIQ=="
}

  1. Nenhum comentário ainda.
  1. Nenhum trackback ainda.