2014-04-01 119 views
0

我想序列化Jackson序列化程序中的子对象。自定义序列化器中的自定义序列化?

所以我有这样的对象:

@JsonSerialize(using = StateSerializer.class) 
public class State { 

    ... 

    @OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
    @JsonProperty(value = "d", required = false) 
    @JsonInclude(JsonInclude.Include.NON_NULL) 
    @JsonSerialize(using = StateDefinitionSerializer.class) 
    private StateDefinition definition; 

    ... 
} 

,并在我的StateSerializer我想用一个名为StateDefinitionSerializer自己的seriliazer连载我StateDefinition:

public class StateSerializer extends JsonSerializer<State> { 

@Override 
public void serialize(State state, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException { 
... 
jsonGenerator.writeObject(state.getDefinition()); 

但后来我最终得到的IOException在杰克逊DefaultSerializerProvider内:

} catch (IOException ioe) { // As per [JACKSON-99], pass IOException and subtypes as-is 
     throw ioe; 
} 

任何想法如何解决这个问题? :)

所有帮助/意见非常赞赏。

最良好的祝愿,

约亨

回答

0

你需要把@JsonSerialize的注释(使用= StateSerializer.class)不是类以上,但对象或参数上面要序列。

在你的情况,你可以这样做:

@JsonSerialize(using = StateSerializer.class) 
@OneToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER) 
... 
private StateDefinition definition;