Jackson 解串器默认如何工作

try*_*ard 5 java jackson lombok deserialization spring-boot

我正在使用Spring-boot 2.1.6并且我有DTO

@AllArgsConstructor
@Builder
@Data // setters, getters, others
@NoArgsConstructor
public class ExampleDto {
    private String fieldOne;
    private String fieldsTwo;

}
Run Code Online (Sandbox Code Playgroud)

我真的需要那么多Lombok注释吗?通过连接(微服务)Jackson反序列化时默认使用哪个?HTTP我想只有NoArgsConstructor+setters就可以了?或者它使用reflection并且只提供 no-arg-constructor 就可以了?

是否可以选择更改Jackson仅使用AllArgsConstructor或的行为builder?我在日志中看到我的应用程序使用它Jackson来反序列化内容。

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.8.8</version>
    <scope>provided</scope>
</dependency>

 <dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jdk8</artifactId>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.datatype</groupId>
    <artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

编辑:

我的问题与Can't make Jackson and Lombok work Together不同,因为它有效。

小智 8

Jackson 使用默认(无参数)构造函数来创建对象,然后使用 setter 设置值。所以你只需要@NoArgsConstructor和@Setter。


Tob*_*ias 0

根据本教程, jackson 搜索 getter 和 setter 方法。此外,要创建该类型的对象,还需要默认构造函数。所以基本上你需要一个满足java bean约定的类。

长话短说:您需要@Datagetter 和 setter 方法以及@NoArgsConstructor默认构造函数来满足 bean 约定。@AllArgsConstructor并且@Builder杰克逊不需要。