Spring & Jackson - 自定義 XML 的 JSON 列表

RO黑蝸牛

我有以下 JSON 格式的輸入(地址列表可以更長):

{
    "name": "Edward",
    "address": [
        {
            "streetName": "value1",
            "city": "value2"
        },
        {
            "streetName": "value3",
            "city": "value4"
        }
    ]
}

我需要像這樣將其轉換為 XML:

<root>
    <name>Edward</name>
    <streetName1>value1</streetName1>
    <city1>value2</city1>
    <streetName2>value3</streetName2>
    <city2>value4</city2>
</root>

我嘗試這樣做:

@JacksonXmlElementWrapper(useWrapping = false)
private List<Address> address = new ArrayList<>();

但我得到的是:

<root>
    <name>Edward</name>
    <address>
        <streetName>value1</streetName>
        <city>value2</city>
    </address>
    <address>
        <streetName>value3</streetName>
        <city>value4</city>
    </address>
</root>

請幫助我獲得所需的格式!任何幫助將非常感激 !謝謝!

勇敢地

可以使用自定義序列化程序解決您的問題,因此如果您有一個Person如下所示類:

@JacksonXmlRootElement(localName = "root")
@JsonSerialize(using = PersonSerializer.class)
public class Person {

    private String name;

    private List<Address> address = new ArrayList<>();

}

您可以構建一個自定義PersonSerializer序列化器類來擴展JsonSerializer類,如下所示:

public class PersonSerializer extends JsonSerializer<Person> {

    @Override
    public void serialize(Person t, JsonGenerator jg, SerializerProvider sp) throws IOException {
        String streetName = "streetName";
        String city = "city";
        int nStreet = 1;
        int nCity = 1;
        jg.writeStartObject();
        jg.writeStringField("name", t.getName());
        for (Address address : t.getAddress()) {

            jg.writeStringField(streetName + String.valueOf(nStreet++), address.getStreetName());
            jg.writeStringField(city + String.valueOf(nCity++), address.getCity());

        }
        jg.writeEndObject();
    }

}

然後你可以Person像下面一樣序列化你的對象,獲得你期望的 xml 結果:

XmlMapper xmlMapper = new XmlMapper();
xmlMapper.enable(SerializationFeature.INDENT_OUTPUT);
//you already have your person object to serialize
String result = xmlMapper.writeValueAsString(person);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章