如何让resteasy从定义类型的json 属性值创建一个class
How to let resteasy create a class from a json property value that defines the type
客户端发送 JSON 和 属性 type
。 type
的可能值是 clipart
和 image
到 resteasy API.
在API/服务器端resteasy现在应该自动创建javaClipart
class的实例或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);
}
}
客户端发送 JSON 和 属性 type
。 type
的可能值是 clipart
和 image
到 resteasy API.
在API/服务器端resteasy现在应该自动创建javaClipart
class的实例或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);
}
}