杰克逊序列化器默认包装列表?

时间:2017-09-15 09:09:51

标签: java json xml spring jackson

我将 (s3.submission_date < s1.submission_date) = dateDIFF(s1.submission_date , '2016-03-01')) spring RestTemplate xml一起用于网络服务。

postForEntity(req, rsp)

使用@Bean public Jackson2ObjectMapperBuilderCustomizer initJackson() { return (builder) -> builder.modules(new JaxbAnnotationModule()); } xsd文件自动生成java bean。因此我无法修改生成的类!

问题:

xsdtojava

结果:@XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) @Generated public class MyRequest { @XmlElement(required = true) private SubReq subs; @XmlAccessorType(XmlAccessType.FIELD) @XmlType public static class SubReq { private List<String> list; } } 元素包含其他嵌套的<list>元素。但为什么?我怎么能阻止?

电流:

<list>

我的目标:

<MyRequest>
    <SubReq>
        <list>  
            <list>val1</list>
            <list>val2</list>
        </list>
    </SubReq>
</MyRequest>

如何配置jackson以不将列表包装在内?

<MyRequest> <SubReq> <list>val1</list> <list>val2</list> </SubReq> </MyRequest> 元素是自动生成的:

MyRequest

2 个答案:

答案 0 :(得分:0)

您可以将DeserializationFeature.UNWRAP_ROOT_VALUE设置为true:

objectMapper = new com.fasterxml.jackson.databind.ObjectMapper();
objectMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);

此属性的默认值为true

这是一个限制,我最好在生成代码时使用@JsonUnwrapped注释这些字段。

答案 1 :(得分:0)

我通过defaultUseWrapper(false)禁用unwrapper来解决它:

@Bean
public Jackson2ObjectMapperBuilderCustomizer initJackson() {
    return (builder) -> builder.modules(new JaxbAnnotationModule())
                    .defaultUseWrapper(false);
}