fastjson fastJson 没法处理多态问题

ohtdti5x  于 2021-11-27  发布在  Java
关注(0)|答案(0)|浏览(331)

我仿照微软AdaptiveCard 生了很多豆子类。
public class AdaptiveTypedElement {
@JsonProperty("additionalPorperties")
public Map<String, Object> additionalPorperties = new HashMap<String, Object>();
//
@JsonProperty("type")
public String type;

@JsonProperty("id")
public String id;

@JsonProperty("text")
public String text;

public Map<String, Object> getAdditionalPorperties() {
    return additionalPorperties;
}

public void setAdditionalPorperties(Map<String, Object> additionalPorperties) {
    this.additionalPorperties = additionalPorperties;
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public void setType(String type) {
    this.type = type;
}

public String getType() {
    return type;
}

public AdaptiveTypedElement(){}

}``

`public class AdaptiveElement extends AdaptiveTypedElement {

@JsonProperty("spacing")
public AdaptiveSpacing spacing ;

@JsonProperty("separator")
public boolean separator = false;

@JsonProperty("speak")
public String speak;

@JsonProperty("separation")
// public AdaptiveSeparationStyle separation;
public String separation;

public AdaptiveElement(){
    super();
}

public String getSpeak() {
    return speak;
}

public void setSpeak(String speak) {
    this.speak = speak;
}

public AdaptiveSpacing getSpacing() {
    return spacing;
}

public void setSeparation(String separation) {
    this.separation = separation;
}

public void setSeparator(boolean separator) {
    this.separator = separator;
}

public void setSpacing(AdaptiveSpacing spacing) {
    this.spacing = spacing;
}

public String getSeparation() {
    return separation;
}

@Override
public String getId() {
    return super.getId();
}

@Override
public void setType(String type) {
    super.setType(type);
}

@Override
public Map<String, Object> getAdditionalPorperties() {
    return super.getAdditionalPorperties();
}

@Override
public String getType() {
    return super.getType();
}

@Override
public void setId(String id) {
    super.setId(id);
}

@Override
public void setAdditionalPorperties(Map<String, Object> additionalPorperties) {
    super.setAdditionalPorperties(additionalPorperties);
}

}

public abstract class AdaptiveInput extends AdaptiveElement {

@JsonProperty("isRequired")
public boolean isRequired;

public AdaptiveInput(){
    super();
}

@Override
public AdaptiveSpacing getSpacing() {
    return super.getSpacing();
}

@Override
public void setSeparation(String separation) {
    super.setSeparation(separation);
}

@Override
public String getSeparation() {
    return super.getSeparation();
}

@Override
public String getSpeak() {
    return super.getSpeak();
}

@Override
public void setSeparator(boolean separator) {
    super.setSeparator(separator);
}

@Override
public void setSpacing(AdaptiveSpacing spacing) {
    super.setSpacing(spacing);
}

@Override
public void setSpeak(String speak) {
    super.setSpeak(speak);
}

public void setRequired(boolean required) {
    isRequired = required;
}

@Override
public String getType() {
    return super.getType();
}

@Override
public void setAdditionalPorperties(Map<String, Object> additionalPorperties) {
    super.setAdditionalPorperties(additionalPorperties);
}

@Override
public void setId(String id) {
    super.setId(id);
}

@Override
public Map<String, Object> getAdditionalPorperties() {
    return super.getAdditionalPorperties();
}

@Override
public void setType(String type) {
    super.setType(type);
}

@Override
public String getId() {
    return super.getId();
}

}

public class AdaptiveTextBlock extends AdaptiveElement{

@JsonProperty("typeName")
protected String typeName = "TextBlock";

// @JsonProperty("type")
// protected String type = "TextBlock";

@JsonProperty("Text")
protected String Text = "";

@JsonProperty("size")
protected AdaptiveTextSize size;

@JsonProperty("weight")
protected AdaptiveTextWeight weight;

@JsonProperty("color")
protected AdaptiveTextColor color;

@JsonProperty("horizontalAlignment")
protected AdaptiveHorizontalAlignment horizontalAlignment = AdaptiveHorizontalAlignment.Left;

@JsonProperty("wrap")
protected boolean wrap = false;

@JsonProperty("isSubtle")
protected boolean isSubtle = false;

@JsonProperty("maxLines")
protected int maxLines = 0;

@JsonProperty("maxWidth")
protected int maxWidth = 0;

public AdaptiveTextBlock(){super();};

@Override
public Map<String, Object> getAdditionalPorperties() {
    return super.getAdditionalPorperties();
}

public String getTypeName() {
    return typeName;
}

@Override
public String getType() {
    type = "TextBlock";
    return type;
}

@Override
public String getId() {
    return super.getId();
}

public AdaptiveHorizontalAlignment getHorizontalAlignment() {
    return horizontalAlignment;
}

public AdaptiveTextColor getColor() {
    return color;
}

public AdaptiveTextSize getSize() {
    return size;
}

public AdaptiveTextWeight getWeight() {
    return weight;
}

public int getMaxLines() {
    return maxLines;
}

public int getMaxWidth() {
    return maxWidth;
}

public String getText() {
    return Text;
}

@Override
public void setId(String id) {
    super.setId(id);
}

@Override
public void setAdditionalPorperties(Map<String, Object> additionalPorperties) {
    super.setAdditionalPorperties(additionalPorperties);
}

public void setColor(AdaptiveTextColor color) {
    this.color = color;
}

public void setHorizontalAlignment(AdaptiveHorizontalAlignment horizontalAlignment) {
    this.horizontalAlignment = horizontalAlignment;
}

public void setMaxLines(int maxLines) {
    this.maxLines = maxLines;
}

public void setMaxWidth(int maxWidth) {
    this.maxWidth = maxWidth;
}

public void setSize(AdaptiveTextSize size) {
    this.size = size;
}

public void setSubtle(boolean subtle) {
    isSubtle = subtle;
}

public void setText(String text) {
    Text = text;
}

public void setType(String type) {
    this.type = type;
}

public void setTypeName(String typeName) {
    this.typeName = typeName;
}

public void setWeight(AdaptiveTextWeight weight) {
    this.weight = weight;
}

public void setWrap(boolean wrap) {
    this.wrap = wrap;
}

}
``public class AdaptiveSubmitAction extends AdaptiveAction {

@JsonProperty("typeName")
public final String typeName = "Action.Submit";

@JsonProperty("type")
public final String type = "Action.Submit";

public AdaptiveSubmitAction(){
    super();
}

@Override
public String getTitle() {
    return super.getTitle();
}

@Override
public void setSpeak(String speak) {
    super.setSpeak(speak);
}

@Override
public String getSpeak() {
    return super.getSpeak();
}

public String getTypeName() {
    return typeName;
}

@Override
public void setTitle(String title) {
    super.setTitle(title);
}

public String getType() {
    return type;
}

}
public class AdaptiveAction extends AdaptiveTypedElement {

@JsonProperty("title")
public String title;

@JsonProperty("speak")
public String speak;

public AdaptiveAction() {
    super();
}

public void setTitle(String title) {
    this.title = title;
}

public void setSpeak(String speak) {
    this.speak = speak;
}

public String getTitle() {
    return title;
}

public String getSpeak() {
    return speak;
}

}
public class AdaptiveCard extends AdaptiveTypedElement {

@JsonProperty("contentType")
public String contentType = "application/vnd.microsoft.card.adaptive";

@JsonProperty("typeName")
public String typeName = "AdaptiveCard";

// @JsonProperty("type")
// protected String type = "AdaptiveCard";

@JsonProperty("body")
public List<AdaptiveElement> body = new ArrayList<AdaptiveElement>();

@JsonProperty("actions")
public List<AdaptiveAction> actions = new ArrayList<AdaptiveAction>();

@JsonProperty("speak")
public String speak = null;

@JsonProperty("title")
public String title;

@JsonProperty("version")
//public AdaptiveSchemaVersion version = null;
public String version = null;

@JsonProperty("fallbackText")
public String fallbackText = null;

@JsonProperty("lang")
public String lang = null;

public AdaptiveCard(){
    super();
}

@Override
public String getType() {
    this.type = "AdaptiveCard";
    return type;
}

public String getContentType() {
    return contentType;
}

public String getFallbackText() {
    return fallbackText;
}

public String getLang() {
    return lang;
}

public String getSpeak() {
    return speak;
}

public String getTitle() {
    return title;
}

public String getVersion() {
    return version;
}

public List<AdaptiveAction> getActions() {
    return actions;
}

public List<AdaptiveElement> getBody() {
    return body;
}

public void setActions(List<AdaptiveAction> actions) {
    this.actions = actions;
}

public void setBody(List<AdaptiveElement> body) {
    this.body = body;
}

public void setContentType(String contentType) {
    this.contentType = contentType;
}

public void setFallbackText(String fallbackText) {
    this.fallbackText = fallbackText;
}

public void setLang(String lang) {
    this.lang = lang;
}

public void setSpeak(String speak) {
    this.speak = speak;
}

public void setTitle(String title) {
    this.title = title;
}

public void setType(String type) {
    this.type = type;
}

public void setTypeName(String typeName) {
    this.typeName = typeName;
}

public void setVersion(String version) {
    this.version = version;
}

}
public class AdaptiveColumn extends AdaptiveContainer{

@JsonProperty("typeName")
public final String typeName  = "Column";

// @JsonProperty("type")
// public final String type = "Column";

@JsonProperty("size")
public String size;

@JsonProperty("with")
public String with;

public AdaptiveColumn(){
    super();
}

public void setSize(String size) {
    this.size = size;
}

public void setWith(String with) {
    this.with = with;
}

public String getTypeName() {
    return typeName;
}

@Override
public String getType() {
    this.type = "Column";
    return type;
}

public String getSize() {
    return size;
}

public String getWith() {
    return with;
}

}

public class AdaptiveColumnSet extends AdaptiveElement {

@JsonProperty("typeName")
public final String typeName  = "ColumnSet";

// @JsonProperty("type")
// public final String type = "ColumnSet";

@JsonProperty("columns")
public List<AdaptiveColumn> columns = new ArrayList<AdaptiveColumn>();

@JsonProperty("selectionAction")
public AdaptiveAction selectionAction = null;

public AdaptiveColumnSet(){
    super();
}

@Override
public String getType() {

    type  = "ColumnSet";
    return type;
}

@Override
public String getSpeak() {
    return super.getSpeak();
}

public String getTypeName() {
    return typeName;
}

@Override
public String getSeparation() {
    return super.getSeparation();
}

@Override
public AdaptiveSpacing getSpacing() {
    return super.getSpacing();
}

@Override
public Map<String, Object> getAdditionalPorperties() {
    return super.getAdditionalPorperties();
}

@Override
public String getId() {
    return super.getId();
}

public AdaptiveAction getSelectionAction() {
    return selectionAction;
}

public List<AdaptiveColumn> getColumns() {
    return columns;
}

@Override
public void setSpeak(String speak) {
    super.setSpeak(speak);
}

@Override
public void setSpacing(AdaptiveSpacing spacing) {
    super.setSpacing(spacing);
}

@Override
public void setSeparator(boolean separator) {
    super.setSeparator(separator);
}

@Override
public void setSeparation(String separation) {
    super.setSeparation(separation);
}

@Override
public void setAdditionalPorperties(Map<String, Object> additionalPorperties) {
    super.setAdditionalPorperties(additionalPorperties);
}

@Override
public void setId(String id) {
    super.setId(id);
}

@Override
public void setType(String type) {
    super.setType(type);
}

public void setColumns(List<AdaptiveColumn> columns) {
    this.columns = columns;
}

public void setSelectionAction(AdaptiveAction selectionAction) {
    this.selectionAction = selectionAction;
}

}
public class AdaptiveContainer extends AdaptiveElement {

@JsonProperty("typeName")
public String typeName = "Container";

// @JsonProperty("type")
// public String type = "Container";

@JsonProperty("items")
public List<AdaptiveElement> items = new ArrayList<AdaptiveElement>();

@JsonProperty("selectAction")
public AdaptiveAction selectAction = null;

@JsonProperty("style")
public AdaptiveContainerStyle style = AdaptiveContainerStyle.Default;

public AdaptiveContainer(){
    super();
}

public void setTypeName(String typeName) {
    this.typeName = typeName;
}

public void setType(String type) {
    this.type = type;
}

@Override
public String getType() {
    type = "Container";
    return type;
}

public String getTypeName() {
    return typeName;
}

public AdaptiveAction getSelectAction() {
    return selectAction;
}

public AdaptiveContainerStyle getStyle() {
    return style;
}

public List<AdaptiveElement> getItems() {
    return items;
}

public void setItems(List<AdaptiveElement> items) {
    this.items = items;
}

public void setSelectAction(AdaptiveAction selectAction) {
    this.selectAction = selectAction;
}

public void setStyle(AdaptiveContainerStyle style) {
    this.style = style;
}

@Override
public void setId(String id) {
    super.setId(id);
}

@Override
public String getId() {
    return super.getId();
}

@Override
public void setAdditionalPorperties(Map<String, Object> additionalPorperties) {
    super.setAdditionalPorperties(additionalPorperties);
}

@Override
public void setSeparation(String separation) {
    super.setSeparation(separation);
}

@Override
public void setSeparator(boolean separator) {
    super.setSeparator(separator);
}

@Override
public void setSpacing(AdaptiveSpacing spacing) {
    super.setSpacing(spacing);
}

@Override
public void setSpeak(String speak) {
    super.setSpeak(speak);
}

@Override
public Map<String, Object> getAdditionalPorperties() {
    return super.getAdditionalPorperties();
}

@Override
public AdaptiveSpacing getSpacing() {
    return super.getSpacing();
}

@Override
public String getSeparation() {
    return super.getSeparation();
}

@Override
public String getSpeak() {
    return super.getSpeak();
}

}

public class AdaptiveDateInput extends AdaptiveInput {

@JsonProperty("typeName")
public final String typeName = "Input.Date";

// @JsonProperty("type")
// public final String type = "Input.Date";

@JsonProperty("placeHolder")
public String placeHolder = null;

@JsonProperty("value")
public String value = null;

@JsonProperty("min")
public String min = null;

@JsonProperty("max")
public String max = null;

public AdaptiveDateInput(){
    super();
}

public void setMax(String max) {
    this.max = max;
}

public String getTypeName() {

    return typeName;
}

public void setMin(String min) {
    this.min = min;
}

public void setPlaceHolder(String placeHolder) {
    this.placeHolder = placeHolder;
}

public void setValue(String value) {
    this.value = value;
}

@Override
public String getType() {

    String type  = "Input.Date";
    return type;
}

public String getMax() {
    return max;
}

public String getMin() {
    return min;
}

public String getPlaceHolder() {
    return placeHolder;
}

public String getValue() {
    return value;
}

@Override
public String getSpeak() {
    return super.getSpeak();
}

@Override
public String getSeparation() {
    return super.getSeparation();
}

@Override
public AdaptiveSpacing getSpacing() {
    return super.getSpacing();
}

@Override
public Map<String, Object> getAdditionalPorperties() {
    return super.getAdditionalPorperties();
}

@Override
public String getId() {
    return super.getId();
}

@Override
public void setSpeak(String speak) {
    super.setSpeak(speak);
}

@Override
public void setSpacing(AdaptiveSpacing spacing) {
    super.setSpacing(spacing);
}

@Override
public void setSeparator(boolean separator) {
    super.setSeparator(separator);
}

@Override
public void setSeparation(String separation) {
    super.setSeparation(separation);
}

@Override
public void setAdditionalPorperties(Map<String, Object> additionalPorperties) {
    super.setAdditionalPorperties(additionalPorperties);
}

@Override
public void setId(String id) {
    super.setId(id);
}

@Override
public void setType(String type) {
    super.setType(type);
}

@Override
public void setRequired(boolean required) {
    super.setRequired(required);
}

}

`
我自己的demo json数据如下:

{ "type": "AdaptiveCard", "version": "1.0", "id": "workloadQCactivity 20", "speak": "activity 20 <break time=\"300ms\"/> at<break time=\"300ms\"/> <break time=\"300ms\"/>building<break time=\"300ms\"/>A<break time=\"300ms\"/>floor<break time=\"300ms\"/>1<break time=\"300ms\"/>room<break time=\"300ms\"/>1<break time=\"300ms\"/> ", "body": [{ "type": "Container", "items": [{ "type": "ColumnSet", "columns": [{ "type": "Column", "width": "Stretch", "items": [{ "type": "TextBlock", "size": "large", "weight": "bolder", "text": "activity 20 at building A floor 1 room 1", "wrap": true }] }] }] }], "actions": [{ "type": "Action.ShowCard", "card": { "type": "AdaptiveCard", "version": "1.0", "body": [{ "type": "TextBlock", "size": "medium", "weight": "bolder", "isSubtle": true, "text": "have thing to check list1", "wrap": true }, { "type": "TextBlock", "weight": "bolder", "isSubtle": true, "text": "this is section 1", "wrap": true }, { "type": "TextBlock", "isSubtle": true, "text": "q1 of s1", "wrap": true }, { "type": "TextBlock", "isSubtle": true, "text": "q2 of s2", "wrap": true }, { "type": "TextBlock", "weight": "bolder", "isSubtle": true, "text": "this is section 2", "wrap": true }, { "type": "TextBlock", "isSubtle": true, "text": "q1 of s22", "wrap": true }, { "type": "TextBlock", "size": "medium", "weight": "bolder", "isSubtle": true, "text": "have checklist 2", "wrap": true }, { "type": "TextBlock", "weight": "bolder", "isSubtle": true, "text": "section of the second checklist", "wrap": true }, { "type": "TextBlock", "isSubtle": true, "text": "qqqqqq", "wrap": true }] }, "title": "Show Checklist" }] }

{
"type": "AdaptiveCard",
"version": "1.0",
"id": "workloadQCactivity 20",
"speak": "activity 20 at buildingAfloor1room1 ",
"body": [{
"type": "Container",
"items": [{
"type": "ColumnSet",
"columns": [{
"type": "Column",
"width": "Stretch",
"items": [{
"type": "TextBlock",
"size": "large",
"weight": "bolder",
"text": "activity 20 at building A floor 1 room 1",
"wrap": true
}]
}]
}]
}],
"actions": [{
"type": "Action.ShowCard",
"card": {
"type": "AdaptiveCard",
"version": "1.0",
"body": [{
"type": "TextBlock",
"size": "medium",
"weight": "bolder",
"isSubtle": true,
"text": "have thing to check list1",
"wrap": true
}, {
"type": "TextBlock",
"weight": "bolder",
"isSubtle": true,
"text": "this is section 1",
"wrap": true
}, {
"type": "TextBlock",
"isSubtle": true,
"text": "q1 of s1",
"wrap": true
}, {
"type": "TextBlock",
"isSubtle": true,
"text": "q2 of s2",
"wrap": true
}, {
"type": "TextBlock",
"weight": "bolder",
"isSubtle": true,
"text": "this is section 2",
"wrap": true
}, {
"type": "TextBlock",
"isSubtle": true,
"text": "q1 of s22",
"wrap": true
}, {
"type": "TextBlock",
"size": "medium",
"weight": "bolder",
"isSubtle": true,
"text": "have checklist 2",
"wrap": true
}, {
"type": "TextBlock",
"weight": "bolder",
"isSubtle": true,
"text": "section of the second checklist",
"wrap": true
}, {
"type": "TextBlock",
"isSubtle": true,
"text": "qqqqqq",
"wrap": true
}]
},
"title": "Show Checklist"
}]
}

我想拿到具体子类,而不是父类:AdaptiveElement, 应该是Column . ColumnSet. 求哪个大神帮忙看下
我的调用地方如何下:
card = (AdaptiveCard) JSON.parseObject(attachJson, AdaptiveCard.class);

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题