【问题标题】:How to serialise generic object using jackson如何使用杰克逊反序列化通用对象
【发布时间】:2018-03-02 10:43:32
【问题描述】:

这是我的课

public class Response<T> {
    private final T data;

    private final String error;

我只能换一个班级。不配置objectMapper可以jackson序列化吗?

编辑: 我在 spring mvc @RestController 中使用这个对象作为方法结果参数。而杰克逊的 objectMapper.canSerialize(Response.class) 返回 false。

编辑: 我已经这样解决了:

公共类响应{

private T data;

private String error;

@JsonIgnore
@JsonTypeInfo(
        use = JsonTypeInfo.Id.CLASS,
        include = JsonTypeInfo.As.PROPERTY
)
private Class<T> type;

...

@JsonIgnore
public Class<T> getType() {
    return type;
}

【问题讨论】:

  • 序列化不会成为问题。但是反序列化可能是,您需要使用类型引用,例如 mapper.readValue(jsonString, new TypeReference>() {});

标签: java jackson jackson2 jackson-databind


【解决方案1】:

在序列化时,我认为不会有问题,因为T data 将保存一些真实对象的对象,并且像 Gson 这样的库将能够正确序列化它们,但是由于反序列化可能会出现问题它不知道必须反序列化哪种类型的事实。为此,您可能需要传递特定的Type,以便告诉库您要反序列化的类型。(注意:我主要与 Gson 合作,因此答案受此影响)

参考:https://stackoverflow.com/a/7299718/1093333

【讨论】:

    猜你喜欢
    • 2017-11-16
    • 2019-11-15
    • 2014-06-10
    • 2018-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多