Java 8のParameterNamesModuleでJackson 2.8.5を使用しています(https://github.com/FasterXML/jackson-modules-java8)。引数が1つのJackson単一引数コンストラクタがParameterNameModuleで失敗する
私の問題は、単一の引数を使用して単一のコンストラクタを使用してクラスをデシリアライズしたいときに、非常に特定の使用例に特有です。ここで動作を再現するテストは次のとおりです。
com.fasterxml.jackson.databind.JsonMappingException:
public class JacksonTest { @Test public void TestReadValue() throws IOException { ObjectMapper objectMapper = new ObjectMapper() .setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY) .setVisibility(PropertyAccessor.CREATOR, JsonAutoDetect.Visibility.PUBLIC_ONLY) .registerModule(new ParameterNamesModule(JsonCreator.Mode.PROPERTIES)); ImmutableIdentity identity = objectMapper.readValue("{\"id\":\"ABCDEF\"}", ImmutableIdentity.class); assertEquals("ABCDEF", identity.id); } private static final class ImmutableIdentity { private final String id; public ImmutableIdentity(final String id) { Objects.requireNonNull(id, "The id must not be null."); this.id = id; } } }
テストが理由で失敗しJacksonTest $ ImmutableIdentity、問題の インスタンスを作成することはできません:IDは である必要はありません。 [出典:{"id": "ABCDEF"};行:1、列:15]
もう1つの引数をコンストラクタに追加すると、テストはOKになります。
public class JacksonTest {
@Test
public void TestReadValue() throws IOException {
ObjectMapper objectMapper = new ObjectMapper()
.setVisibility(PropertyAccessor.FIELD, JsonAutoDetect.Visibility.ANY)
.setVisibility(PropertyAccessor.CREATOR, JsonAutoDetect.Visibility.PUBLIC_ONLY)
.registerModule(new ParameterNamesModule(JsonCreator.Mode.PROPERTIES));
ImmutableIdentity identity = objectMapper.readValue("{\"id\":\"ABCDEF\"}", ImmutableIdentity.class);
assertEquals("ABCDEF", identity.id);
}
private static final class ImmutableIdentity {
private final String id;
public ImmutableIdentity(final String id, **final String unused**) {
Objects.requireNonNull(id, "The id must not be null.");
this.id = id;
}
}
}
それは私のビジネスオブジェクトで値を持たないので、私は本当に、特に彼らは、インスタンスPROJECTIDのためのもの、またはいくつかの抽象的な、それはあまり曖昧にするために、ここでコンストラクタで役に立たない引数を使用するためにアイデアを好きではない
私のエンティティを定義するIDと私はそれらを手動で構築する必要があります。だから私はこれをサポートするためにジャクソンの構成を見たいですが、できませんでした。
私もメンテナのためにここにクロスポスト:https://github.com/FasterXML/jackson-modules-java8/issues/8
あなたは、単一の引数のコンストラクタは、従来の動作のためあいまいであることを意味しますか?私は今理解しています、答えとそれらの議論へのリンクに感謝します。 –
はい、問題ありません。 – lpandzic