没有single-int-arg构造函数/工厂方法

时间:2015-08-07 15:55:25

标签: jackson fasterxml

我有这段代码:

final Person p = new Person(1L);
final ObjectMapper mapper = JacksonUtil.INSTANCE.getMapper();
final TypeReference<HashMap<String, Object>> typeMap = new TypeReference<HashMap<String, Object>>() {};
final String personJson= mapper.writeValueAsString(p);
mapper.readValue(personJson, typeMap);

personJson就像:

"id" : 1

每当我在Json中有Long type时,当我尝试阅读时它就不起作用了。我有这个错误:

  

com.fasterxml.jackson.databind.JsonMappingException:不能   实例化类型的值[simple type,class   来自积分号的org.codehaus.jackson.generated.java.lang.Number];   没有single-int-arg构造函数/工厂方法

如何让它接受Long类型?在映射器中是否有要启用的功能?

2 个答案:

答案 0 :(得分:4)

在Person中创建一个接受整数的构造函数(而不是像你一样长)。如果你肯定想接受long,那么尝试创建一个接受Number的构造函数。

答案 1 :(得分:0)

在Person中创建一个构造函数,该构造函数接受一个整数(而不是一个整数)。如果您确实想接受long,请尝试创建一个接受Number的构造函数。 假设您有一个像这样的Bean /模型类

public class Person{
    private Long id;
    private String name;

    public Person() {
        super();
        // TODO Auto-generated constructor stub
    }
    public Person(Long id) {
        super();
        this.id = id;
    }

    //getter and setter
}

这里的第二个构造函数接受一个Long值

希望您

没有single-int-arg构造函数/工厂方法

错误将消失