私は(問題を表示するには、このビットを抽出)のようなJSON文字列をデシリアライズしようとしています(ジャクソン1.9.2)@JsonIgnoreが動作するように取得:階層にミックスインの注釈付きのデシリアライゼーションおよび多型タイプ
{
"$type": "com.example.StringProperty",
"value": "hello world",
"name": "text",
"readOnly": false
}
以下のミックスインの注釈
@JsonTypeInfo(use=JsonTypeInfo.Id.CLASS, include=JsonTypeInfo.As.PROPERTY, property="$type")
abstract public class PropertyMixin
{
@JsonProperty
public String name;
//@JsonIgnore
//public boolean readOnly;
@JsonProperty
public int type;
PropertyMixin(@JsonProperty("name") String pName, @JsonProperty("type") int pType)
{
}
}
abstract public class StringPropertyMixin
{
@JsonProperty
public String value;
//@JsonIgnore
//public boolean readOnly;
@JsonCreator
public StringPropertyMixin(@JsonProperty("name") String pName, @JsonProperty("value") String value)
{
}
}
を使用して
public class Property
{
public String name;
public int type;
Property(String pName, int pType) { name = pName; type = pType; }
}
public class StringProperty extends Property
{
public String value;
StringProperty(String pName, String pValue) {
super(pName, String);
value = pValue;
}
}
のように見えるのクラスジャクソン1.9.2で、私は取得していますエラーが
Unrecognized field "readOnly" (Class com.example.StringProperty), not marked as ignorable
である私は@JsonIgnore
を使用してみましたが、それは(私はそれを試してみましたか確認するためにコメントアウトコードの位置を確認してください)助けにはなりませんでした。私はおそらく何かが不足していますが、もう一組の目はそれを見て私を助ける必要があると思います。
これは、デシリアライゼーション環境がどのように見えるかです:
objectMapper.setVisibilityChecker(objectMapper.getSerializationConfig().getDefaultVisibilityChecker()
.withFieldVisibility(JsonAutoDetect.Visibility.NONE)
.withGetterVisibility(JsonAutoDetect.Visibility.NONE)
.withSetterVisibility(JsonAutoDetect.Visibility.NONE)
.withCreatorVisibility(JsonAutoDetect.Visibility.NONE));
MixinRegistrations module = new MixinRegistrations();
objectMapper.registerModule(module);
とミックスインモジュールは、私はすべての助けに感謝
@Override
public void setupModule(SetupContext context)
{
context.setMixInAnnotations(Property.class, PropertyMixin.class);
context.setMixInAnnotations(StringProperty.class, StringPropertyMixin.class);
}
のように見えます。前もって感謝します。
PS:違いがあるのかどうかわかりませんが、.NET Framework v4で書かれたライブラリによってJSONが生成されています。
はい、あなたが望む動作なら@JsonIgnoreProperties(ignoreUnknown = true)を追加することができます –
@Dunes:この状況で '@ JsonIgnore'が動作しない場合、' @ JsonIgnoreProperties'はどのように役立ちますか? '@ JsonIgnoreProperties'は' @ JsonIgnore'を複数の値に拡張したものです。 – alokoko
私はなぜ '@ JsonIgnore'が私の場合にはうまくいかなかったのか理解しましたが、' @ JsonIgnoreProperties'は[this post](http:// stackoverflow。com/questions/7438474/what-is-wrong-with-my-jsoncreator-and-mixin-annotation)が含まれています。 @ JsonIgnorePropertiesアノテーションを指摘してくれてありがとう。 – alokoko