2

我有一个域对象用于 2 种不同的服务,如下所示:

public class PersonDetails {

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

    // setters and getters ...
}

并有两种不同的服务。

第一 :

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

此服务应返回 json 如下:

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

二服务:

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

您可以使用两种不同的 ObjectMapper,一种带有 MixIn,另一种没有。

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 回答