JSONファイルの内容によっては、スーパークラスまたはサブクラスのいずれかにデシリアライズする必要があります。ジャンクションでのJSONファイルの多型逆シリアル化
これは、スーパークラスにデシリアライズされるべきで、それはこのようになります場合:
{
"id":"123",
"title":"my title",
"body":"my body"
}
またはサブクラスにそれはこのように見える場合:
{
"id":"123",
"title":"my title",
"body":"my body",
"tags":["tag1", "tag2"]
}
だから、唯一の違いは、tags
配列です、これは文字列配列に逆シリアル化する必要があります。 しかし、私はJersey(Dropwizard)でPOSTリクエストによってデシリアライズをトリガーすると、{"code":400,"message":"Unable to process JSON"}
を返します。
これは、スーパークラスである:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME)
@JsonSubTypes({ @JsonSubTypes.Type(name = "subdocument", value = SubDocument.class) })
public class SuperDocument {
private String id;
private String title;
private String body;
public SuperDocument() {
}
@JsonCreator
public SuperDocument(@JsonProperty("id") String id, @JsonProperty("title") String title, @JsonProperty("body") String body) {
this.id = id;
this.title = title;
this.body = body;
}
@JsonProperty("id")
public String getId() {
return id;
}
@JsonProperty("id")
public void setId(String id) {
this.id = id;
}
... the other getters and setters ...
}
これはサブクラスである:
@JsonTypeName("subdocument")
public class SubDocument extends SuperDocument {
private String[] tags;
public SubDocument() {
}
@JsonCreator
public SubDocument(@JsonProperty("id") String id, @JsonProperty("title") String title, @JsonProperty("body") String body, @JsonProperty("tags") String[] tags) {
super(id, title, body);
this.tags = tags;
}
@JsonProperty("tags")
public String[] getTags() {
return tags;
}
@JsonProperty("tags")
public void setTags(String[] tags) {
this.tags = tags;
}
}
あなたは私が間違っているの何を知っていますか?
追加の識別プロパティの下に示すように
カスタムTypeDeserializer
今すぐあなたの
SuperDocument
クラスに注釈を付けるトリックは、あなたに感謝でした! – phly