【问题标题】:Jackson custom serializerJackson 自定义序列化器
【发布时间】:2016-01-11 02:19:44
【问题描述】:

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

在我的应用程序中,我添加了 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();
}

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

问候, 超离子

【问题讨论】:

    标签: jackson serialization


    【解决方案1】:

    看起来不错。只要确保您将 Jackson 2.x 注释 (com.fasterxml.jackson) 与 Jackson 2.x ObjectMapper 一起使用。由于 1.x 的注解名称相同(但 Java 包不同),尽管看起来相同,但它们将不起作用(仅来源中的 import 语句不同)。

    还要注意,您可以实现JsonSerializable,这样就无需在此处使用@JsonSerialize 注释。

    【讨论】:

      猜你喜欢
      • 2016-02-13
      • 2011-04-12
      • 2015-01-30
      • 2018-05-06
      • 2016-01-29
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 2021-03-03
      相关资源
      最近更新 更多