2 votes

comment utiliser le sérialiseur JACKSON pour un objet de domaine utilisé pour différents services ?

J'ai un objet de domaine qui est utilisé pour 2 services différents comme ci-dessous :

public class PersonDetails {

    private String personId;    
    private String personMaritalStatus;
    private String personFirstName;
    private String personLastName;

    // setters and getters ...
}

et avoir deux services différents.

Premier :

public BaseResponse getClient(@QueryParam("id") @DefaultValue("-1") String id) 
{
}

ce service doit retourner le json comme ci-dessous :

{ "personId":12, 
  "personMaritalStatus":"married", 
  "personFirstname" :"abc", 
  "personLastname":"pqr" }

Deuxième service :

public BaseResponse getClientName(@QueryParam("id") @DefaultValue("-1") String id) 
{    
}

ce service doit retourner le json comme ci-dessous :

{"personFirstname" :"abc"}

Donc si j'ai utilisé @JsonSerialize(using=PersonDetailsSerializer.class) sur l'objet de domaine et la classe de sérialiseur seront comme ci-dessous :

public class PersonDetailsSerializerextends JsonSerializer<PersonDetails> 
{
    @Override
    public void serialize(PersonDetails personDetails,
                          JsonGenerator jsonGenerator,
                          SerializerProvider serializerProvider) 
                              throws IOException, JsonProcessingException {
        jsonGenerator.writeStartObject();
        jsonGenerator.writeStringField("personFirstname", personDetails.getpersonFirstName());
        jsonGenerator.writeEndObject(); 
    } 
}

alors cela a un impact sur la réponse pour le service getPerson aussi.

Alors comment puis-je utiliser la sérialisation au niveau du service ou y a-t-il un autre moyen de gérer cela, en utilisant JACKSON...

0voto

Fireblaze Points 134

Vous pouvez utiliser deux ObjectMappers différents : un avec un MixIn et un sans.

abstract class PersonNameMixIn {
    @JsonIgnore()
    abstract String getPersonLastName();
    @JsonIgnore()
    abstract String getPersonMaritalStatus();
}

public getClientName() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.getSerializationConfig().addMixInAnnotations(PersonDetails.class, PersonNameMixIn.class);
        mapper.writeValue(writer, person);        
}

public getClient() {
        ObjectMapper mapper = new ObjectMapper();
        mapper.writeValue(writer, person);        
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X