英文:
Java serializer/deserializer for List<Long>
问题
以下是翻译好的部分:
我需要创建序列化器和反序列化器,因为我遇到了以下错误:
com.fasterxml.jackson.databind.exc.MismatchedInputException: 无法从 START_ARRAY 令牌中反序列化 `java.lang.Long` 的实例
然后我这样做:
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 强制转换为 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
),问题:参数类型不匹配。
英文:
I need to make serializer and deserializer, because I get this error:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize instance of `java.lang.Long` out of START_ARRAY token
And I make it:
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);
}
}
and
public class CalculatorIDsSerializer extends JsonSerializer<Long>{
@Override
public void serialize(Long aLong, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
jsonGenerator.writeString(Long.toString(aLong));
}
}
but now I have this error:
com.fasterxml.jackson.databind.JsonMappingException: org.hibernate.collection.internal.PersistentBag cannot be cast to java.lang.Long
And I make it for:
@JsonDeserialize(using = CalculatorIDsDeserializer.class)
@JsonSerialize(using = CalculatorIDsSerializer.class)
private List<Long> insuranceFileIDs = new ArrayList<>();
Some tips how to solve it? I have no more ideas after a few hours. Thaks
Update: I change it to this, but I get same error
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;
}
}
Update2:
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();
}
});
}
}
and
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;
}
}
And i get: Problem deserializing property 'insuranceFileIDs' (expected type: [simple type, class java.lang.Long]; actual type: java.util.ArrayList
), problem: argument type mismatch
专注分享java语言的经验与见解,让所有开发者获益!
评论