Мне нужно сделать сериализатор и десериализатор, потому что я получаю эту ошибку:
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
), проблема: несоответствие типа аргумента