如何告诉Jacksons ObjectMapper序列化我自己的类?我必须提供序列化器吗?
考虑以下示例:
public class MyType {
private int a;
private String b;
// Getters and Setters
}
// TODO: configure ObjectMapper, such that the following is true:
objectMapper.canDeserialize(type)
我相信杰克逊有一种方法可以自动完成所有操作,而无需指定反序列化“策略”,因为MyType的序列化已经有效。
感谢您的帮助!
答案 0 :(得分:4)
是的,它可以在没有自定义序列化程序的情况下序列化POJO。 但在您的情况下,问题是所有属性都是“隐藏”的。默认情况下,杰克逊会寻找:
要使Jackson使用私有字段,您可以使用@JsonProperty对其进行注释,或者更改默认的可见性检查级别,如果您希望找到所有私有(或受保护的包可见)字段。 这可以通过注释(@JsonAutoDetect)或定义全局可见性检查器来完成。
答案 1 :(得分:2)
我的自定义类出了问题,因为它有一些不明确的setter方法。如果您使用@JsonSetter注释要用作setter的方法的onoe,一切都是正确的。
public class MyType {
private int a;
@JsonSetter
public void setA(int a) {...}
public void setA(String a) {...}
}
如果没有注释,objectMapper.deserialize(...)
将失败。在内部抛出了一个提供更多信息的exeption,但它被捕获并且只返回false。