杰克逊解串器默认情况下如何工作

问题描述 投票:3回答:2

我正在使用Spring-boot 2.1.6,而我有DTO

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

}

我真的在这里需要那么多Lombok注释吗?通过Jackson连接(微服务)反序列化时,默认情况下HTTP将使用哪个?我猜只有NoArgsConstructor + setters可以吗?还是使用reflection并且仅提供no-arg-constructor很好?

是否可以将Jackson的行为更改为仅使用AllArgsConstructorbuilder?我在日志中看到我的应用使用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>

编辑:

我的问题与Can't make Jackson and Lombok work together不同,因为它起作用了。

java spring-boot jackson deserialization lombok
2个回答
1
投票

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


0
投票

根据this tutorial杰克逊搜索吸气剂和塞特方法。另外,要创建类型的对象,还需要默认的构造函数。因此,基本上,您需要一个满足java bean约定的类。

长话短说:对于getter和setter方法,您需要@Data;对于默认构造函数,您需要@NoArgsConstructor才能满足bean约定。对于杰克逊,不需要@AllArgsConstructor@Builder

© www.soinside.com 2019 - 2024. All rights reserved.