Джексон: обернуть объект JSON новым объектом JSON - PullRequest
0 голосов
/ 15 марта 2019

У меня есть следующий класс:

public class Rows {

@JacksonXmlElementWrapper(useWrapping = false)
@JsonProperty(value = "row")
@JsonTypeInfo(include = As.WRAPPER_OBJECT, use = Id.NAME)
private List<List<Column>> data;

}

А вот и мой класс Column.

@JacksonXmlRootElement(localName = "column")
public class Column {
@JacksonXmlProperty(isAttribute = true)
@JsonProperty("@name")
private String name;

@JsonDeserialize(using = JavaTypeDeserializer.class)
@JacksonXmlProperty(isAttribute = true, localName = "class")
@JsonProperty(value = "@class")
private Class<?> classType;

@JacksonXmlProperty(isAttribute = true)
@JsonProperty("@type")
private String type;

@JacksonXmlText
@JsonProperty("$")
private String content;

Теперь я хотел бы получить этот результат в моем JSON:

"rows": {
        "row": [
          {
            "column": [
              {
                "@name": "name",
                "@type": "type",
                "$": "123"
              },
              {
                "@name": "name",
                "@type": "type",
                "$": "1234"
              },
              {
                "@name": "name",
                "@type": "type",
                "$": "1243"
              }
            ]
          }
        ]
      }

Когда я выполняю код выше, я получаю почти желаемый результат, но окружающий объект "столбец" называется "ArrayList".

Есть ли способ настроить имя для этого объекта? Спасибо!

1 Ответ

1 голос
/ 15 марта 2019

Это немного нетрадиционно, но разве это будет хорошо?

class Container {
    private Rows rows;

    public Rows getRows() {
        return rows;
    }

    public void setRows(Rows rows) {
        this.rows = rows;
    }
}

class Rows {
    @JsonProperty("row")
    private List<Row> rows;

    public List<Row> getRows() {
        return rows;
    }

    public void setRows(List<Row> rows) {
        this.rows = rows;
    }
}

class Row {
    @JsonProperty("column")
    private List<Column> columns;

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

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

class Column {
    @JacksonXmlProperty(isAttribute = true)
    @JsonProperty("@name")
    private String name;

    @JsonDeserialize(using = JavaTypeDeserializer.class)
    @JacksonXmlProperty(isAttribute = true, localName = "class")
    @JsonProperty(value = "@class")
    private Class<?> classType;

    @JacksonXmlProperty(isAttribute = true)
    @JsonProperty("@type")
    private String type;

    @JacksonXmlText
    @JsonProperty("$")
    private String content;

    public void setName(String name) {
        this.name = name;
    }

    public void setClassType(Class<?> classType) {
        this.classType = classType;
    }

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

    public void setContent(String content) {
        this.content = content;
    }

}

Когда я сериализирую контейнер, это выдает:

{
  "rows" : {
    "row" : [ {
      "column" : [ {
        "@name" : "1552663236010",
        "@class" : null,
        "@type" : null,
        "$" : null
      }, {
        "@name" : "1552663236010",
        "@class" : null,
        "@type" : null,
        "$" : null
      } ]
    }, {
      "column" : [ {
        "@name" : "1552663236010",
        "@class" : null,
        "@type" : null,
        "$" : null
      }, {
        "@name" : "1552663236010",
        "@class" : null,
        "@type" : null,
        "$" : null
      } ]
    } ]
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...