ไม่สามารถทำให้แจ็คสันและลอมบ็อกทำงานร่วมกันได้


96

ฉันกำลังทดลองในการรวมแจ็คสันและลอมบอก นี่คือชั้นเรียนของฉัน:

package testelombok;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Value;
import lombok.experimental.Wither;

@Value
@Wither
@AllArgsConstructor(onConstructor=@__(@JsonCreator))
public class TestFoo {
    @JsonProperty("xoom")
    private String x;
    private int z;
}
package testelombok;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.xebia.jacksonlombok.JacksonLombokAnnotationIntrospector;
import java.io.IOException;

public class TestLombok {

    public static void main(String[] args) throws IOException {
        TestFoo tf = new TestFoo("a", 5);
        System.out.println(tf.withX("b"));
        ObjectMapper om = new ObjectMapper().setAnnotationIntrospector(new JacksonLombokAnnotationIntrospector());
        System.out.println(om.writeValueAsString(tf));
        TestFoo tf2 = om.readValue(om.writeValueAsString(tf), TestFoo.class);
        System.out.println(tf2);
    }

}

นี่คือ JAR ที่ฉันเพิ่มเข้าไปใน classpth:

ฉันกำลังรวบรวมกับ Netbeans (ฉันไม่คิดว่าสิ่งนี้เกี่ยวข้องจริงๆ แต่ฉันกำลังรายงานเรื่องนี้เพื่อให้ทำซ้ำได้อย่างสมบูรณ์แบบและน่าเชื่อถือ) JAR ทั้งห้าด้านบนจะถูกเก็บไว้ในโฟลเดอร์ชื่อ " lib" ภายในโฟลเดอร์โครงการ (พร้อมด้วย " src", " nbproject", " test" และbuild") ฉันเพิ่มลงใน Netbeans ผ่านปุ่ม " เพิ่ม JAR / โฟลเดอร์ " ในคุณสมบัติของโปรเจ็กต์และมีการระบุไว้ในลำดับที่ถูกต้องตามรายการด้านบน โปรเจ็กต์นี้เป็นโปรเจ็กต์ประเภท "แอปพลิเคชัน Java" มาตรฐาน

นอกจากนี้โครงการ Netbeans ได้รับการกำหนดค่าให้ " ไม่รวบรวมเมื่อบันทึก ", " สร้างข้อมูลการแก้ไขจุดบกพร่อง ", " รายงาน API ที่เลิกใช้งาน ", " ติดตามการอ้างอิงจาวา ", "การตรวจสอบคำอธิบายประกอบการเปิดใช้งาน " และ "การตรวจสอบคำอธิบายประกอบการเปิดใช้งานในตัวแก้ไข " ไม่มีตัวประมวลผลคำอธิบายประกอบหรือตัวเลือกการประมวลผลคำอธิบายประกอบที่กำหนดไว้อย่างชัดเจนใน Netbeans นอกจากนี้-Xlint:allตัวเลือกบรรทัดคำสั่ง "" จะถูกส่งผ่านในบรรทัดคำสั่งของคอมไพเลอร์และคอมไพเลอร์จะทำงานบน VM ภายนอก

เวอร์ชัน javac ของฉันคือ 1.8.0_72 และเวอร์ชัน java ของฉันคือ 1.8.0_72-b15 Netbeans ของฉันคือ 8.1

โครงการของฉันรวบรวมได้ดี อย่างไรก็ตามมันมีข้อยกเว้นในการดำเนินการ ข้อยกเว้นดูเหมือนจะไม่ใช่สิ่งที่ดูง่ายหรือแก้ไขได้ชัดเจน นี่คือผลลัพธ์รวมถึง stacktrace:

TestFoo(x=b, z=5)
{"z":5,"xoom":"a"}
Exception in thread "main" com.fasterxml.jackson.databind.JsonMappingException: Argument #0 of constructor [constructor for testelombok.TestFoo, annotations: {interface java.beans.ConstructorProperties=@java.beans.ConstructorProperties(value=[x, z]), interface com.fasterxml.jackson.annotation.JsonCreator=@com.fasterxml.jackson.annotation.JsonCreator(mode=DEFAULT)}] has no property name annotation; must have name when multiple-parameter constructor annotated as Creator
 at [Source: {"z":5,"xoom":"a"}; line: 1, column: 1]
    at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:296)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:269)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCacheValueDeserializer(DeserializerCache.java:244)
    at com.fasterxml.jackson.databind.deser.DeserializerCache.findValueDeserializer(DeserializerCache.java:142)
    at com.fasterxml.jackson.databind.DeserializationContext.findRootValueDeserializer(DeserializationContext.java:475)
    at com.fasterxml.jackson.databind.ObjectMapper._findRootDeserializer(ObjectMapper.java:3890)
    at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3785)
    at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2833)
    at testelombok.TestLombok.main(TestLombok.java:14)
Caused by: java.lang.IllegalArgumentException: Argument #0 of constructor [constructor for testelombok.TestFoo, annotations: {interface java.beans.ConstructorProperties=@java.beans.ConstructorProperties(value=[x, z]), interface com.fasterxml.jackson.annotation.JsonCreator=@com.fasterxml.jackson.annotation.JsonCreator(mode=DEFAULT)}] has no property name annotation; must have name when multiple-parameter constructor annotated as Creator
    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._addDeserializerConstructors(BasicDeserializerFactory.java:511)
    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory._constructDefaultValueInstantiator(BasicDeserializerFactory.java:323)
    at com.fasterxml.jackson.databind.deser.BasicDeserializerFactory.findValueInstantiator(BasicDeserializerFactory.java:253)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:219)
    at com.fasterxml.jackson.databind.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:141)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer2(DeserializerCache.java:406)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createDeserializer(DeserializerCache.java:352)
    at com.fasterxml.jackson.databind.deser.DeserializerCache._createAndCache2(DeserializerCache.java:264)
    ... 7 more

ฉันได้ลองสุ่มจิ้มด้วยคำอธิบายประกอบ@Valueและ@AllArgsConstructorคำอธิบายประกอบแล้ว แต่ไม่สามารถทำให้ดีขึ้นได้

ฉัน google'd ข้อยกเว้นและพบว่ามีการรายงานข้อผิดพลาดเก่าบนแจ็คสันและอีกสิ่งหนึ่งที่จะเปิด แต่ดูเหมือนว่าจะเกี่ยวข้องกับสิ่งอื่น อย่างไรก็ตามสิ่งนี้ยังไม่ได้บอกอะไรเกี่ยวกับข้อบกพร่องนี้หรือวิธีแก้ไข นอกจากนี้ฉันไม่พบสิ่งที่เป็นประโยชน์เมื่อมองหาที่อื่น

เนื่องจากสิ่งที่ฉันพยายามทำคือการใช้งานทั้งลอมบ็อกและแจ็คสันขั้นพื้นฐานดูเหมือนจะแปลกที่ฉันไม่พบข้อมูลที่เป็นประโยชน์เพิ่มเติมเกี่ยวกับวิธีแก้ปัญหานี้ บางทีฉันอาจพลาดอะไรไป?

นอกจากพูดว่า " ไม่ใช้ลอมบอก " หรือ " ไม่ใช้แจ็คสัน " มีใครคิดวิธีแก้ปัญหานี้บ้างไหม

คำตอบ:


59

หากคุณต้องการไม่เปลี่ยนรูป แต่เป็น POJO แบบอนุกรม json โดยใช้ลอมบอกและแจ็คสัน ใช้คำอธิบายประกอบใหม่ของแจ็คสันบนตัวสร้างลอมบ็อกของคุณ@JsonPOJOBuilder(withPrefix = "") ฉันลองใช้วิธีนี้แล้วและได้ผลดีมาก ตัวอย่างการใช้งาน

import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonPOJOBuilder;
import lombok.Builder;
import lombok.Value;

@JsonDeserialize(builder = Detail.DetailBuilder.class)
@Value
@Builder
public class Detail {

    private String url;
    private String userName;
    private String password;
    private String scope;

    @JsonPOJOBuilder(withPrefix = "")
    public static class DetailBuilder {

    }
}

หากคุณมีคลาสมากเกินไป@Builderและคุณไม่ต้องการให้คำอธิบายประกอบโค้ดต้นแบบว่างเปล่าคุณสามารถแทนที่ตัวดักจับคำอธิบายประกอบให้ว่างได้withPrefix

mapper.setAnnotationIntrospector(new JacksonAnnotationIntrospector() {
        @Override
        public JsonPOJOBuilder.Value findPOJOBuilderConfig(AnnotatedClass ac) {
            if (ac.hasAnnotation(JsonPOJOBuilder.class)) {//If no annotation present use default as empty prefix
                return super.findPOJOBuilderConfig(ac);
            }
            return new JsonPOJOBuilder.Value("build", "");
        }
    });

และคุณสามารถลบคลาสตัวสร้างว่างด้วย@JsonPOJOBuilderคำอธิบายประกอบ


ยินดีต้อนรับลิงก์ไปยังโซลูชัน แต่โปรดตรวจสอบให้แน่ใจว่าคำตอบของคุณมีประโยชน์หากไม่มีมัน: เพิ่มบริบทรอบ ๆ ลิงก์เพื่อให้เพื่อนผู้ใช้ของคุณมีความคิดว่ามันคืออะไรและทำไมจึงอยู่ที่นั่นจากนั้นจึงอ้างถึงส่วนที่เกี่ยวข้องที่สุดของเพจคุณ เชื่อมโยงใหม่ในกรณีที่หน้าเป้าหมายไม่พร้อมใช้งาน คำตอบที่มากกว่าลิงก์เพียงเล็กน้อยอาจถูกลบ
geisterfurz007

โซลูชันนี้ช่วยให้ไม่สามารถเปลี่ยนรูปได้ในขณะที่ทำงานกับปัญหาการแยกส่วนของตัวสร้างที่ตายจากสมองของแจ็คสัน (ตัวสร้างหลายฟิลด์ต้องการ @JsonProperty ในอาร์กิวเมนต์ตัวสร้างแต่ละตัวแทนที่จะพยายามทำอะไรที่ชาญฉลาด) (ฉันได้ลองใช้ onConstructor _ = {@ JsonCreator} โดยไม่มีโชค)
JeeBee

38

ไม่เปลี่ยนรูป + Lombok + Jackson ได้ด้วยวิธีต่อไป:

import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import lombok.Value;

@Value
@NoArgsConstructor(force = true, access = AccessLevel.PRIVATE)
@AllArgsConstructor
public class LocationDto {

    double longitude;
    double latitude;
}

class ImmutableWithLombok {

    public static void main(String[] args) throws Exception {
        ObjectMapper objectMapper = new ObjectMapper();

        String stringJsonRepresentation = objectMapper.writeValueAsString(new LocationDto(22.11, 33.33));
        System.out.println(stringJsonRepresentation);

        LocationDto locationDto = objectMapper.readValue(stringJsonRepresentation, LocationDto.class);
        System.out.println(locationDto);
    }
}

4
ไม่AllArgsConstructorได้เป็นส่วนหนึ่งของ@Valueคำอธิบายประกอบใช่หรือไม่
Zon

8
การเพิ่มอย่างชัดเจน@NoArgsConstructorจะแทนที่ตัวสร้างที่สร้างขึ้นโดย@Valueคำอธิบายประกอบดังนั้นคุณต้องเพิ่มส่วนพิเศษ@AllArgsConstructor
Davio

1
ทางออกที่ดีที่สุดที่ฉันพบ - ในความคิดของฉัน - ไม่มีรูปแบบตัวสร้าง ขอบคุณ.
Radouxca

16

ฉันลองหลายวิธีข้างต้นและพวกเขาทั้งหมดเป็นคนเจ้าอารมณ์ สิ่งที่ทำงานจริงๆสำหรับฉันคือคำตอบที่ผมพบที่นี่

ในไดเร็กทอรีรูทของโปรเจ็กต์ของคุณให้เพิ่มไฟล์lombok.config (หากคุณยังไม่ได้ทำ)

lombok.config

และข้างในวางสิ่งนี้

lombok.anyConstructor.addConstructorProperties=true

จากนั้นคุณสามารถกำหนด pojos ของคุณดังต่อไปนี้:

@Data
@AllArgsConstructor
public class MyPojo {

    @JsonProperty("Description")
    private String description;
    @JsonProperty("ErrorCode")
    private String errorCode;
}

2
แต่สิ่งนี้ไม่เปลี่ยนแปลง?
vphilipnyc

ไม่เปลี่ยนรูปเพียงแค่เปลี่ยนข้อมูลโดย Getter and Builder หรือ RequiredArgsConstructor และทำเครื่องหมายฟิลด์ทั้งหมดเป็นขั้นสุดท้าย
nekperu15739

ความคิดเห็นใด ๆ เกี่ยวกับสาเหตุที่ไม่ได้ผลในกรณีของฉัน ฉันมีแอปพลิเคชั่นสปริงบูตและฉันได้วาง lombok.config ไว้ใน src ของฉันแล้ว แต่โซลูชันของคุณยังใช้งานไม่ได้
Thanos M

8

ฉันมีปัญหาเดียวกันทุกประการ "แก้ไข" โดยการเพิ่มsuppressConstructorProperties = trueพารามิเตอร์ (โดยใช้ตัวอย่างของคุณ):

@Value
@Wither
@AllArgsConstructor(suppressConstructorProperties = true)
public class TestFoo {
    @JsonProperty("xoom")
    private String x;
    private int z;
}

เห็นได้ชัดว่าแจ็คสันไม่ชอบjava.beans.ConstructorProperties คำอธิบายประกอบที่เพิ่มให้กับตัวสร้าง suppressConstructorProperties = trueพารามิเตอร์บอกลอมบอกจะไม่เพิ่มมัน (มันไม่โดยค่าเริ่มต้น)


7
suppressConstructorPropertiesเลิกใช้แล้ว :-(
lilalinux

3
ซึ่งไม่ใช่ปัญหาเนื่องจากค่าเริ่มต้นใหม่ก็เช่นfalseกัน
Michael Piefel

4

@AllArgsConstructor(suppressConstructorProperties = true)เลิกใช้แล้ว กำหนดlombok.anyConstructor.suppressConstructorProperties=true( https://projectlombok.org/features/configuration ) และเปลี่ยนคำอธิบายประกอบลอมบ็อกของ POJO จาก@Valueเป็น@Data+ @NoArgsConstructor+ @AllArgsConstructorใช้ได้กับฉัน


14
สิ่งนี้เปลี่ยนคลาสให้ไม่แน่นอนซึ่งฉันคิดว่าไม่ใช่สิ่งที่ OP ต้องการ
Amit Goldstein

3

จากคำตอบของ Jan Rieke

ตั้งแต่ lombok 1.18.4 คุณสามารถกำหนดค่าที่จะคัดลอกคำอธิบายประกอบไปยังพารามิเตอร์ตัวสร้างได้ ใส่สิ่งนี้ลงในlombok.config:

lombok.copyableAnnotations += com.fasterxml.jackson.annotation.JsonProperty

จากนั้นเพิ่ม @JsonPropertyในฟิลด์ของคุณ:

...

คุณจะต้องมี @JsonProperty ในทุกช่องแม้ว่าชื่อจะตรงกัน แต่ก็เป็นแนวทางปฏิบัติที่ดีในการปฏิบัติตาม คุณยังสามารถตั้งค่าฟิลด์ของคุณเป็นสาธารณะขั้นสุดท้ายโดยใช้สิ่งนี้ซึ่งฉันชอบมากกว่า getters

@ToString
@EqualsAndHashCode
@Wither
@AllArgsConstructor(onConstructor=@__(@JsonCreator))
public class TestFoo {
    @JsonProperty("xoom")
    public final String x;
    @JsonProperty("z")
    public final int z;
}

นอกจากนี้ยังควรทำงานร่วมกับ getters (+ setters) ด้วย


1
วิธีนี้ช่วยแก้ปัญหาของฉันได้! ขอบคุณมาก! ฉันติดอยู่กับการรวมสปริงบูตและการทำให้เป็นอนุกรมระหว่าง JSON และ POJO และได้รับข้อผิดพลาด: Can not deserialize instance of java.lang.String out of START_OBJECT token... และสิ่งนี้ได้รับการแก้ไขแล้ว! ฉันจำเป็นต้องมี@JsonPropertyคำอธิบายประกอบสำหรับพารามิเตอร์คอนสตรัคเตอร์แต่ละตัวและนอกเหนือจากที่@AllArgsConstructorอนุญาตให้ลอมบอกใช้เป็นเครื่องมือนั้น
ทำเครื่องหมาย

2

สำหรับฉันมันใช้งานได้เมื่อฉันอัปเดตเวอร์ชันลอมบอกเป็น: 'org.projectlombok: lombok: 1.18.0'


1

คุณสามารถให้ Jackson เล่นอะไรก็ได้ถ้าคุณใช้รูปแบบ "mixin" ของมัน โดยทั่วไปจะช่วยให้คุณสามารถเพิ่มคำอธิบายประกอบ Jackson ลงในคลาสที่มีอยู่ได้โดยไม่ต้องแก้ไขคลาสนั้นจริงๆ ฉันเอนเอียงไปที่จะแนะนำที่นี่มากกว่าโซลูชันลอมบอกเพราะนี่เป็นการแก้ปัญหาที่แจ็คสันมีกับคุณสมบัติของแจ็คสันดังนั้นจึงมีแนวโน้มที่จะทำงานในระยะยาว


1

ฉันทุกชั้นเรียนของฉันมีคำอธิบายประกอบดังนี้:

@JsonAutoDetect(fieldVisibility = Visibility.ANY)
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
@Data
@Accessors(fluent = true)
@NoArgsConstructor
@AllArgsConstructor

ใช้งานได้กับลอมบอกและแจ็คสันทุกเวอร์ชันเป็นเวลาอย่างน้อยสองสามปี

ตัวอย่าง:

@JsonAutoDetect(fieldVisibility = Visibility.ANY)
@JsonInclude(JsonInclude.Include.NON_DEFAULT)
@Data
@Accessors(fluent = true)
@NoArgsConstructor
@AllArgsConstructor
public class Person {
    String id;
    String first;
    String last;
}

และนั่นแหล่ะ ลอมบอกและแจ็คสันเล่นด้วยกันอย่างจับใจ


9
นี่คือคลาสที่ไม่แน่นอน
ŁukaszG

0
@JsonInclude(JsonInclude.Include.NON_NULL)
@Data
public class Person {
   String id;
   String first;
   String last;
}

เพิ่มเติมสำหรับคลาสข้อมูลควรกำหนดค่า ObjectMapper ให้ถูกต้อง ในกรณีนี้มันใช้ได้กับการกำหนดค่า ParameterNamesModule และการตั้งค่าการเปิดเผยฟิลด์และวิธีการของผู้สร้าง

    om.registerModule(new ParameterNamesModule());
    om.setVisibility(FIELD, JsonAutoDetect.Visibility.ANY);
    om.setVisibility(CREATOR, JsonAutoDetect.Visibility.ANY);

จากนั้นควรทำงานตามที่คาดไว้


0

ฉันมีปัญหากับการไม่ให้ลอมบอกเพิ่มไฟล์ ConstructorProperiesคำอธิบายประกอบจึงไปอีกทางหนึ่งและปิดการใช้งาน Jackson จากการดูคำอธิบายประกอบนั้น

ผู้กระทำผิดเป็นJacksonAnnotationIntrospector.findCreatorAnnotation ข้อสังเกต:

if (_cfgConstructorPropertiesImpliesCreator
            && config.isEnabled(MapperFeature.INFER_CREATOR_FROM_CONSTRUCTOR_PROPERTIES)

นอกจากนี้ให้สังเกตJacksonAnnotationIntrospector.setConstructorPropertiesImpliesCreator :

public JacksonAnnotationIntrospector setConstructorPropertiesImpliesCreator(boolean b)
{
    _cfgConstructorPropertiesImpliesCreator = b;
    return this;
}

ดังนั้นสองตัวเลือกให้ตั้งค่าเป็นMapperFeature.INFER_CREATOR_FROM_CONSTRUCTOR_PROPERTIESเท็จหรือสร้างJacksonAnnotationIntrospectorชุดsetConstructorPropertiesImpliesCreatorเป็นfalseและตั้งค่านี้AnnotationIntrospectorในObjectMapperทางObjectMapper.setAnnotationIntrospector ObjectMapper.setAnnotationIntrospector

สังเกตสองสามสิ่งฉันใช้ Jackson 2.8.10 และไม่มีในเวอร์ชันMapperFeature.INFER_CREATOR_FROM_CONSTRUCTOR_PROPERTIESนั้น ฉันไม่แน่ใจว่ามันถูกเพิ่มเข้ามาในแจ็คสันรุ่นไหน ดังนั้นหากไม่มีให้ใช้JacksonAnnotationIntrospector.setConstructorPropertiesImpliesCreatorกลไก


0

คุณต้องมีโมดูลนี้เช่นกัน https://github.com/FasterXML/jackson-modules-java8

จากนั้นเปิดแฟล็ก -parameters สำหรับคอมไพเลอร์ของคุณ

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.7.0</version>
                <configuration>
                    <compilerArgs>
                        <arg>-parameters</arg>
                    </compilerArgs>
                </configuration>
            </plugin>

0

ฉันต่อสู้กับเรื่องนี้อยู่ครู่หนึ่งเช่นกัน แต่ดูเอกสารที่นี่ ฉันจะเห็นว่าพารามิเตอร์คำอธิบายประกอบ onConstructor ถือเป็นการทดลองและไม่ได้รับการสนับสนุนอย่างดีกับ IDE ของฉัน (STS 4) ตามเอกสารของ Jackson สมาชิกส่วนตัวไม่ได้ (de) ต่อเนื่องกันโดยค่าเริ่มต้น มีวิธีง่ายๆในการแก้ไขปัญหานี้

เพิ่มคำอธิบายประกอบ JsonAutoDetect และตั้งค่าอย่างเหมาะสมเพื่อตรวจหาสมาชิกที่ได้รับการป้องกัน / ส่วนตัว สะดวกสำหรับ DTO

@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY)
public class SomeClass

เพิ่มฟังก์ชั่นโรงงานด้วยคำอธิบายประกอบ @JsonCreator ซึ่งจะได้ผลดีที่สุดหากคุณต้องการการตรวจสอบวัตถุหรือการแปลงเพิ่มเติม

public class SomeClass {

   // some code here

   @JsonCreator
   public static SomeClass factory(/* params here dressing them in @JsonProperty annotations*/) {
      return new SomeClass();
   }
}

แน่นอนคุณสามารถเพิ่มตัวสร้างด้วยตนเองในตัวคุณเองได้เช่นกัน


-1

ฉันมีปัญหาที่แตกต่างออกไปและเป็นกับประเภทดั้งเดิมของบูลีน

private boolean isAggregate;

ส่งผลให้เกิดข้อผิดพลาดดังต่อไปนี้

Exception: Unrecognized field "isAggregate" (class 

แปลง Lambok isAggregateจะisAggregate()เป็นทะเยอทะยานทำให้ทรัพย์สินภายในเพื่อลอมบอกเป็นแทนaggregate isAggregateห้องสมุด Jackson ไม่ชอบและต้องการisAggregateทรัพย์สินแทน

ฉันอัปเดตบูลีนดั้งเดิมเป็น Wrapper Boolean เพื่อแก้ไขปัญหานี้ มีตัวเลือกอื่น ๆ สำหรับคุณหากคุณกำลังจัดการกับbooleanประเภทต่างๆโปรดดูข้อมูลอ้างอิงด้านล่าง

โซล:

private Boolean isAggregate;

อ้างอิง: https://www.baeldung.com/lombok-getter-boolean


คุณลองใช้ aggregate แทน isAggregate ด้วย primitive type หรือไม่? ฉันเชื่อว่ามันสามารถแก้ไขข้อผิดพลาดได้เช่นกัน โปรดดูstackoverflow.com/a/42620096/6332074
Muhammad Waqas Dilawar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.