java - Jackson 解析类不起作用

标签 java jackson lombok

我指的是这个tutorial学习 jackson 的基础知识,但严重陷入其中。

这是异常(exception):

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;
}

这是解析逻辑:

@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);
    }
}

仅供引用,我正在使用JacksonLombok:

    <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>

这到底是怎么回事。请分享一些想法。

更新 2018-05-10 @Hemant Patel,谢谢。刚刚添加了 @NoArgsConstructor,就像魔术一样。它按预期工作。我会调查一下,看看到底发生了什么。

@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Car implements Serializable {
    String color;
    String type;
}

顺便说一句,谢谢@Thomas 和@Alex,我检查了这两篇帖子,但我真的不认为真正的原因在于与Lombok<的关系/em>。

最佳答案

经过一番查找,我从它的官方API中找到了这个documentation :

public ObjectMapper()

Default constructor, which will construct the default JsonFactory as necessary, use SerializerProvider as its SerializerProvider, and BeanSerializerFactory as its SerializerFactory. This means that it can serialize all standard JDK types, as well as regular Java Beans (based on method names and Jackson-specific annotations), but does not support JAXB annotations.

众所周知,什么是Java Bean(基于此post):

A JavaBean is just a standard

  1. All properties private (use getters/setters)
  2. A public no-argument constructor
  3. Implements Serializable.

关于java - Jackson 解析类不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50253841/

相关文章:

java - 使用 Jackson 解析 XML 时如何忽略特定节点

c# - C# 中的 Java 等效代码

java - 按需在 Gradle 中制作 NON-FAT jar

java - 计算字符串中用户指定字符的出现次数

java - Jackson 反序列化多态类而不是数组

java - 验证 Apple iOS iTunes 收据;基于 0 或 1 的小时

java - 用于 Java 8 的带有 lambda 表达式的构建器

java - 使用 ignorecase 生成 Lombok equals 方法

java - Lombok EqualsAndHashCode 处理可选数组

java - 使用 Unicode 分隔符拆分字符串