Нет конструктора / метода с одинарным внутренним аргументом

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

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? Есть ли какая-либо функция для включения в маппере?

1 ответ

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

Создайте конструктор в Person, который принимает целое число (и не так долго, как вы). Если вы определенно хотите принять long, попробуйте создать конструктор, принимающий Number. Предположим, у вас есть такой класс 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

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

нет конструктора / фабричного метода single-int-arg

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

Другие вопросы по тегам