【发布时间】:2019-08-14 20:07:54
【问题描述】:
我只想序列化和反序列化简单的不可变对象,不明白为什么我不能使用 Jackson 来做到这一点
import java.io.IOException;
import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.Value;
public class TestApplication {
@Value
static class Test {
private final String a;
}
public static void main(String[] args) throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
String res = objectMapper.writeValueAsString(new Test("test"));
System.out.println(res);
System.out.println(objectMapper.readValue(res, Test.class));
}
}
异常失败:
Exception in thread "main" com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.devchallange.rogatakopita.RogatakopitaApplication$Test` (although at least one Creator exists): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"a":"test"}"; line: 1, column: 2]
at com.fasterxml.jackson.databind.exc.MismatchedInputException.from(MismatchedInputException.java:63)
at com.fasterxml.jackson.databind.DeserializationContext.reportInputMismatch(DeserializationContext.java:1343)
at com.fasterxml.jackson.databind.DeserializationContext.handleMissingInstantiator(DeserializationContext.java:1032)
at com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1297)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:326)
at com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:159)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:4013)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:3004)
at com.devchallange.rogatakopita.RogatakopitaApplication.main(RogatakopitaApplication.java:29)
我知道答案应该很简单,但这是最常见的情况,不是吗?
【问题讨论】:
-
The code provided does not compile。因此,所提供的代码不可能产生所提供的异常。