杰克逊解析课不起作用

时间:2018-05-09 12:48:33

标签: java jackson lombok

我指的是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>的。

1 个答案:

答案 0 :(得分:1)

经过长时间的搜索后,我发现了其官方API documentation

  

public ObjectMapper()

     

默认构造函数,它将根据需要构造默认的JsonFactory,使用SerializerProvider作为其SerializerProvider,使用BeanSerializerFactory作为其SerializerFactory。这意味着它可以序列化所有标准JDK类型,以及常规 Java Bean (基于方法名称和特定于Jackson的注释),但不支持JAXB注释。

我们知道,什么是 Java Bean (基于此post):

  

JavaBean只是标准的

     
      
  1. 所有属性私有(使用getter / setters)
  2.   
  3. 公共无参数构造函数
  4.   
  5. 实现Serializable。
  6.