【问题标题】:jackson xml serialize list of strings to concatenated stringjackson xml将字符串列表序列化为连接字符串
【发布时间】:2021-05-11 13:15:12
【问题描述】:

在我的课堂上有一个字符串列表。现在我需要将此列表序列化为一个由换行符分隔的串联字符串。

public class Address{

    @JacksonXmlProperty(localName = "ADDRESS_FIELD")
    @JacksonXmlCData
    private List<String> addressLines;

    // Irrelevant parts omitted

}

假设列表包含三个元素:第 1 行、第 2 行和第 3 行。如何获得以下输出?

<ADDRESS_FIELD>
<![CDATA[
Row1
Row2
Row3
]]>
</ADDRESS_FIELD>

【问题讨论】:

    标签: java xml serialization jackson


    【解决方案1】:

    您需要实现自定义com.fasterxml.jackson.databind.JsonSerializer 序列化器并将所需形式的内容手动包装到CDATA

    class JoinListToStringJsonSerializer extends JsonSerializer<List<?>> {
    
        @Override
        public void serialize(List<?> list, JsonGenerator gen, SerializerProvider serializers) throws IOException {
            final String delimiter = System.lineSeparator();
    
            String value = list.stream()
                    .map(Object::toString)
                    .collect(Collectors.joining(delimiter));
    
            gen.writeRawValue(delimiter + "<![CDATA[" + delimiter + value + delimiter + "]]>");
        }
    }
    

    用法:

    @JacksonXmlProperty(localName = "ADDRESS_FIELD")
    @JacksonXmlElementWrapper(useWrapping = false)
    @JsonSerialize(using = JoinListToStringJsonSerializer.class)
    private List<String> addressLines;
    

    【讨论】:

      猜你喜欢
      • 2020-05-20
      • 1970-01-01
      • 2015-10-25
      • 2021-01-08
      • 2018-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多