私はジャクソンとロンボクを組み合わせて実験しています。それらは私のクラスです:ジャクソンとロンボクが一緒に働くことはできません
ロンボク:https://projectlombok.org/downloads/lombok.jar(バージョン1.16.10)
ジャクソン
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([email protected]__(@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); } }
それらは私がclasspthに追加しているJARファイルです注釈:http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-annotations/2.8.2/jackson-annotations-2.8.2.jar
ジャクソンコア:http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-core/2.8.2/jackson-core-2.8.2.jar
ジャクソンのデータバインド:http://repo1.maven.org/maven2/com/fasterxml/jackson/core/jackson-databind/2.8.2/jackson-databind-2.8.2.jar
ジャクソン - ロンボク:http://repo1.maven.org/maven2/io/paradoxical/jackson-lombok/1.1/jackson-lombok-1.1.jar
は、私はNetbeansのとそれをコンパイルしています(私はこれが本当に関連しているとは思わないが、私はこれを報告していますとにかくそれを完全かつ忠実に再現可能にする)。上記の5つのJARファイルは、プロジェクトフォルダ内の "lib
"というフォルダに保存されています( "src
"、 "nbproject
"、 "test
"、 "build
")。プロジェクトプロパティで「Add JAR/Folder」ボタンを使用してNetbeansに追加しました。これらのボタンは、上記のリストと同じ順序で表示されます。このプロジェクトは、標準的な "Javaアプリケーション"タイプのプロジェクトです。
さらに、NetBeansプロジェクトは、 "情報をデバッグ生成"、 "は保存をコンパイルしない" に設定され、 "トラックJavaの依存関係"、 "activacte注釈 "レポートはAPIのを非推奨しました" 「を処理しています」、「編集者」が有効になっています。注釈プロセッサーまたは注釈処理オプションは、Netbeansで明示的に構成されていません。また、 "-Xlint:all
"コマンドラインオプションはコンパイラコマンドラインで渡され、コンパイラは外部VM上で実行されます。
javacのバージョンは1.8.0_72で、Javaのバージョンは1.8.0_72-b15です。私のネットビーンズは8.1です。
私のプロジェクトは正常にコンパイルされます。ただし、実行時に例外がスローされます。例外は、簡単にまたは明らかに修正可能に見えるものではないようです。ここでスタックトレースを含む出力は、次のとおりです。
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 [email protected]es(value=[x, z]), interface [email protected]son.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 [email protected]es(value=[x, z]), interface [email protected]son.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例外とfound an old bug report on jacksonとanother one that is open, but seems to be related to something elseです。しかし、これはまだ何がこのバグか、それを修正する方法について何も教えていない。また、私はどこか他の場所を探すのに役立つものは見つけられませんでした。
私はロンボクとジャクソンの両方の非常に基本的な使い方をしているので、この問題を回避する方法については、これ以上役に立つ情報は見つけられませんでした。多分私は何かを忘れた?
単に「 はロンボクを使用していない」と言っ以外か、誰もがこの問題を解決する方法についてのアイデアを持っているか、「はジャクソンを使用していませんか」?
'suppressConstructorProperties'が今ソリューションへのリンクは大歓迎です – lilalinux