如何让resteasy从定义类型的json 属性值创建一个class

How to let resteasy create a class from a json property value that defines the type

客户端发送 JSON 和 属性 typetype 的可能值是 clipartimage 到 resteasy API.

在API/服务器端resteasy现在应该自动创建javaClipartclass的实例或Image[的实例=29=]。根据客户端中定义的type JSON.

我该怎么做?

下面的解决方案做到了。

@JsonIgnoreProperties(ignoreUnknown = true)
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = As.PROPERTY, property = "type")
@JsonSubTypes({
    @JsonSubTypes.Type(value = JSONImageItem.class, name = ItemType.TYPE_IMAGE),
    @JsonSubTypes.Type(value = JSONClipartItem.class, name = ItemType.TYPE_CLIPART),
})
public abstract class JSONAbstractItem implements AbstractItem {
  JSONAbstractItem() {
    // for resteasy
  }
}

public interface AbstractItem {
  @JsonInclude(Include.NON_NULL)
  ItemType getType();
}

@JsonTypeName(ItemType.TYPE_IMAGE)
public class JSONImageItem extends JSONAbstractItem {
  JSONImageItem() {
  }
}

@JsonTypeName(ItemType.TYPE_CLIPART)
public class JSONClipartItem extends JSONAbstractItem {
  JSONClipartItem() {
    // for resteasy
  }
}

public enum ItemType {
  IMAGE, CLIPART;

  public static final String TYPE_IMAGE = "IMAGE";
  public static final String TYPE_CLIPART = "CLIPART";

  @JsonCreator
  public static ItemType fromString(String value) {
    return Arrays.stream(ItemType.values()).filter(v -> v.name().equalsIgnoreCase(value)).findFirst().orElse(null);
  }
}