我指的是tutorial来学习杰克逊的基础知识,但却严重陷入困境。
这是一个例外:
//Get tag from x, z pos
Debug.Log(GetTagFromPos(1, 2));
//Get object from x, z pos
Debug.Log(GetObjectFromPos(1, 2));
这是类:
com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `hello.Car` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: (String)"{"color":"Black","type":"BMW"}"; line: 1, column: 2]
这是解析逻辑:
@Builder
@Data
@AllArgsConstructor
public class Car implements Serializable {
private String color;
private String type;
}
F.Y.I我正在使用 Jackson 和 Lombok :
@Service
public class HelloService {
public void testJackson() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
String json1 = "{\"color\":\"Black\",\"type\":\"BMW\"}";
Car car1 = objectMapper.readValue(json1, Car.class);
}
}
这里真正的问题是什么。请分享一些想法。
更新 2018-05-10
@Hemant Patel,谢谢。刚刚添加了 <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.4</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
<scope>provided</scope>
</dependency>
,就像魔术一样。它按预期工作。我将调查它以找出真正发生的事情。
@NoArgsConstructor
BTW感谢@Thomas和@Alex,我检查了这两个帖子,但我真的不认为真正原因与 Lombok <关系 / em>的。
答案 0 :(得分:1)
经过长时间的搜索后,我发现了其官方API documentation:
public ObjectMapper()
默认构造函数,它将根据需要构造默认的JsonFactory,使用SerializerProvider作为其SerializerProvider,使用BeanSerializerFactory作为其SerializerFactory。这意味着它可以序列化所有标准JDK类型,以及常规 Java Bean (基于方法名称和特定于Jackson的注释),但不支持JAXB注释。
我们知道,什么是 Java Bean (基于此post):
JavaBean只是标准的
- 所有属性私有(使用getter / setters)
- 公共无参数构造函数
- 实现Serializable。
醇>