Kann Jackson und Lombok nicht zusammenarbeiten lassen

Ich experimentiere mit der Kombination von Jackson und Lombok. Das sind meine Klassen:

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

}

Das sind die JARs, die ich zur Klasse hinzufüge:

Lombok:https: //projectlombok.org/downloads/lombok.ja (Version 1.16.10)

Jackson Anmerkungen:http: //repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.8.2/jackson-annotations-2.8.2.ja

Jackson Core:http: //repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.8.2/jackson-core-2.8.2.ja

Jackson Datenbank:http: //repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.8.2/jackson-databind-2.8.2.ja

Jackson-lombok:http: //repo1.maven.org/maven2/io/paradoxical/jackson-lombok/1.1/jackson-lombok-1.1.ja

Ich kompiliere es mit Netbeans (ich halte das nicht für wirklich relevant, aber ich melde es trotzdem, um es perfekt und genau reproduzierbar zu machen). Die fünf obigen JARs befinden sich in einem Ordner mit dem Namen "lib "im Projektordner (zusammen mit"src ","nbproject ","test" und "build "). Ich habe sie über" @ "zu Netbeans hinzugefüg JAR / Ordner hinzufügenlicken Sie in den Projekteigenschaften auf die Schaltfläche "@" und sie werden in der genauen Reihenfolge wie in der obigen Liste aufgeführt. Das Projekt ist ein Standardprojekt vom Typ "Java-Anwendung".

Außerdem ist das Netbeans-Projekt auf "@" konfigurier Kompiliere NICHT beim Speichern "," Debugging-Informationen generieren "," Veraltete APIs melden "," Track Java Abhängigkeiten ","activacte Annotation-Verarbeitung" und "activacte Annotation-Verarbeitung im Editor ". In Netbeans ist weder ein Anmerkungsprozessor noch eine Anmerkungsverarbeitungsoption explizit konfiguriert. Außerdem wird das"-Xlint:allie Befehlszeilenoption "@" wird in der Compiler-Befehlszeile übergeben, und der Compiler wird auf einer externen VM ausgeführ

Meine Java-Version ist 1.8.0_72 und meine Java-Version ist 1.8.0_72-b15. Mein Netbeans ist 8.1.

Mein Projekt kompiliert gut. Es löst jedoch eine Ausnahme bei seiner Ausführung aus. Die Ausnahme scheint nichts zu sein, was leicht oder offensichtlich reparabel aussieht. Hier ist die Ausgabe, einschließlich der Stapelverfolgung:

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

Ich habe bereits versucht, zufällig mit dem @ zu stöbe@Value und@AllArgsConstructor Anmerkungen, aber ich könnte es nicht besser machen.

Ich google'd die Ausnahme undfound einen alten Fehlerbericht über Jackson, und eine andere, die offen ist, aber mit etwas anderem zu tun zu haben scheint. Dies sagt jedoch noch nichts darüber aus, was dieser Fehler ist oder wie er behoben werden kann. Außerdem konnte ich nichts Nützliches finden, das woanders aussah.

Da ich versuche, sowohl lombok als auch jackson sehr einfach zu benutzen, ist es merkwürdig, dass ich keine nützlicheren Informationen zur Umgehung dieses Problems finden konnte. Vielleicht habe ich etwas verpasst?

Anderes als nur " benutze nicht lombok" oder " benutze nicht Jackson ", hat jemand eine Idee, wie man das löst?

Antworten auf die Frage(18)

Ihre Antwort auf die Frage