Java сериализатор / десериализатор для списка <Long> - PullRequest
0 голосов
/ 10 апреля 2020

Мне нужно сделать сериализатор и десериализатор, потому что я получаю эту ошибку:

com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.Long` out of START_ARRAY token

И я делаю это:

public class CalculatorIDsDeserializer extends JsonDeserializer<Long> {
    @Override
    public Long deserialize(final JsonParser jsonParser,
                            final DeserializationContext deserializationContext)
            throws IOException {
        String dataString = jsonParser.getText();
        return Long.parseLong(dataString);
    }
}

и

public class CalculatorIDsSerializer extends JsonSerializer<Long>{
    @Override
    public void serialize(Long aLong, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeString(Long.toString(aLong));
    }
}

но теперь у меня есть эта ошибка:

 com.fasterxml.jackson.databind.JsonMappingException: org.hibernate.collection.internal.PersistentBag cannot be cast to java.lang.Long

И я делаю это для:

@JsonDeserialize(using = CalculatorIDsDeserializer.class)
@JsonSerialize(using = CalculatorIDsSerializer.class)
private List<Long> insuranceFileIDs = new ArrayList<>();

Несколько советов, как ее решить? У меня больше нет идей через несколько часов. Такс

Обновление: Я изменяю это на это, но я получаю ту же ошибку: (

public class CalculatorIDsDeserializer extends JsonDeserializer<List<Long>> {

    @Override
    public List<Long> deserialize(final JsonParser jsonParser,
                                  final DeserializationContext deserializationContext)
            throws IOException {

        String dataString = jsonParser.getText();
        List<Long> ids = null;
        ids.add(Long.parseLong(dataString));
        return ids;
    }
}

Обновление2:

public class CalculatorIDsSerializer extends JsonSerializer<List<Long>>{

    @Override
    public void serialize(List<Long> longs, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        longs.forEach(item ->{
            try {
                jsonGenerator.writeString(Long.toString(item));
            } catch (IOException e) {
                e.printStackTrace();
            }
        });
    }
}

и

public class CalculatorIDsDeserializer extends JsonDeserializer<List<Long>> {
    @Override
    public List<Long> deserialize(final JsonParser jsonParser,
                                  final DeserializationContext deserializationContext)
            throws IOException {
        String dataString = jsonParser.getText();
        List<Long> ids = new ArrayList<>();
        ids.add(Long.parseLong(dataString));
        return ids;
    }
}

И я получаю: Проблема десериализации свойства 'insuranceFileIDs' (ожидаемый тип: [простой тип, класс java .lang.Long]; фактический тип: java.util.ArrayList), проблема: несоответствие типа аргумента

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...