【问题标题】:Custom serialization inside a custom serializer?自定义序列化程序中的自定义序列化?
【发布时间】:2014-04-01 19:51:54
【问题描述】:

我想在 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 的序列化器来序列化我的 StateDefinition:

public class StateSerializer extends JsonSerializer<State> {

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

但是我最终在杰克逊 DefaultSerializerProvider 中得到了一个 IOException:

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

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

非常感谢所有帮助/cmets。

祝你好运,

乔辰

【问题讨论】:

    标签: json jackson


    【解决方案1】:

    您需要将@JsonSerialize(using = StateSerializer.class) 的注解不要放在类之上,而是放在要序列化的对象或参数之上。

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

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

    【讨论】:

      猜你喜欢
      • 2010-11-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-07
      • 1970-01-01
      • 2019-08-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多