杰克逊自定义序列化程序
Jackson custom serializer
我尝试使用自定义的 Jackson 序列化程序,但遗憾的是序列化程序不会被触发。
在我的应用程序中,我添加了杰克逊:
JacksonJaxbJsonProvider jacksonProvider = new JacksonJaxbJsonProvider();
jacksonProvider.setMapper( mapper );
s.add( jacksonProvider );
return s;
我为 class 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 2.x ObjectMapper
中使用 Jackson 2.x 注释 (com.fasterxml.jackson
)。由于 1.x 的注释名称相同(但 Java 包不同),它们将不起作用,尽管看起来相同(只有 import
源中的语句不同)。
另请注意,您可以实施 JsonSerializable
,这样就无需在此处使用 @JsonSerialize
注释。
我尝试使用自定义的 Jackson 序列化程序,但遗憾的是序列化程序不会被触发。
在我的应用程序中,我添加了杰克逊:
JacksonJaxbJsonProvider jacksonProvider = new JacksonJaxbJsonProvider();
jacksonProvider.setMapper( mapper );
s.add( jacksonProvider );
return s;
我为 class 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 2.x ObjectMapper
中使用 Jackson 2.x 注释 (com.fasterxml.jackson
)。由于 1.x 的注释名称相同(但 Java 包不同),它们将不起作用,尽管看起来相同(只有 import
源中的语句不同)。
另请注意,您可以实施 JsonSerializable
,这样就无需在此处使用 @JsonSerialize
注释。