2

以下のように2つの異なるサービスに使用される1つのドメインオブジェクトがあります:

public class PersonDetails {

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

    // setters and getters ...
}

そして2つの異なるサービスを持っています。

最初の1つ :

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

このサービスは次のようにjsonを返す必要があります:

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

2番目のサービス:

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

このサービスは次のようにjsonを返す必要があります:

{"personFirstname" :"abc"}

したがって、@JsonSerialize(using=PersonDetailsSerializer.class)ドメインオブジェクトを使用した場合、シリアライザークラスは次のようになります。

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

次に、getPersonサービスの応答にも影響を与えます。

では、JACKSONを使用して、サービスレベルのシリアル化をどのように使用できますか、またはこれを処理する他の方法はありますか...

4

1 に答える 1

0

1 つは MixIn を使用し、もう 1 つは使用しない 2 つの異なる ObjectMappers を使用できます。

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);        
}
于 2012-10-05T11:04:25.687 に答える