2015-10-13 116 views
2

我尝试使用自定义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(); 
} 

我错过任何一步注册串行器?

问候, 海波

回答

0

这看起来OK。只要确保您使用Jackson 2.x注释(com.fasterxml.jackson)和Jackson 2.x ObjectMapper即可。由于1.x的注释名称相同(但Java包不同),所以它们将不起作用,尽管看起来相同(源中只有import语句不同)。

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