杰克逊定制序列化器

时间:2015-10-13 10:56:41

标签: jackson serializer

我尝试使用自定义的Jackson序列化程序,但不幸的是序列化程序不会被触发。

在我的申请表中,我添加了杰克逊:

JacksonJaxbJsonProvider jacksonProvider = new JacksonJaxbJsonProvider();
jacksonProvider.setMapper( mapper );
s.add( jacksonProvider );
return s;

我为我的类TestType添加了一个序列化器:

@JsonSerialize(using = TestSerializer.class)
public class TestType {
  private String test;

  public String getTest(){
    if (test==null || test.isEmpty()){
      test="test";
    }
    return test;
  }

  public void setTest(String test) {
    this.test = test;
  }
}

public class TestSerializer extends JsonSerializer<TestType> {
  @Override
  public void serialize(TestType value, JsonGenerator jgen, SerializerProvider provider) 
    throws IOException, JsonProcessingException {
      jgen.writeStartObject();
      jgen.writeStringField("special serialization", value.getTest());
      jgen.writeEndObject();
  }
}

API:

@GET 
@Produces({"application/json; charset=UTF-8"})
public Response getTest(@HeaderParam( RestHelper.HEADER_PARAM_ORIGIN ) String origin, @Context HttpServletRequest request, @Context HttpHeaders headers) {
   TestType test = new TestType();
   test.setTest("test");
   return Response.status(200).entity( test ).build();
}

我是否错过了注册序列化程序的任何步骤?

此致 海波

1 个答案:

答案 0 :(得分:0)

看起来不错。只需确保使用Jackson 2.x注释(com.fasterxml.jackson)和Jackson 2.x ObjectMapper。由于1.x的注释名称是相同的(但Java包不同),它们将无法工作,尽管看起来相同(源中只有import语句不同)。

另请注意,您可以实施JsonSerializable,这样就无需在此处使用@JsonSerialize注释。