нет конструктора/фабричного метода с одним целым аргументом

У меня есть этот код:

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

Всякий раз, когда у меня есть Long type в моем Json, он не работает, когда я пытаюсь его прочитать. У меня есть эта ошибка:

com.fasterxml.jackson.databind.JsonMappingException: невозможно создать экземпляр значения типа [простой тип, класс org.codehaus.jackson.generated.java.lang.Number] из целого числа; нет конструктора/фабричного метода с одним целым аргументом

Как я могу заставить его принимать тип Long? Есть ли функция, которую можно включить в маппере?


person Chris    schedule 07.08.2015    source источник


Ответы (2)


Создайте конструктор в Person, который принимает целое число (а не длинное, как вы). Если вы определенно хотите принять длинное значение, попробуйте создать конструктор, который принимает числовое значение.

person Mike Argyriou    schedule 08.03.2016
comment
Не могли бы вы привести пример? - person nitinsridar; 30.08.2019

Создайте конструктор в Person, который принимает целое число (а не длинное, как вы). Если вы определенно хотите принять длинное значение, попробуйте создать конструктор, который принимает числовое значение. Предположим, у вас есть класс bean/model, подобный этому

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

Я надеюсь, что ваш

нет конструктора/фабричного метода с одним целым аргументом

ошибка исчезнет

person Md. Maidul Islam    schedule 14.02.2020