【问题标题】:Jackson FasterXML doesn't fail for invalid XMLJackson FasterXML 不会因无效 XML 而失败
【发布时间】:2019-09-10 13:12:38
【问题描述】:

下面的代码不会抛出错误,也许它无法解析,但将appConfig字段作为null返回。我试过 JAXB,不像 JAXB 会抛出错误。我需要当 xml 无效时我的代码无法解析。我该怎么做?

波乔:

import lombok.Data;
import com.fasterxml.jackson.annotation.JsonRootName;

@Data
@JsonRootName("app-config")
public class Config {
    private String type;
    private String body;
}

XML(config-invalid.xml):

<?xml version="1.0" encoding="UTF-8"?>
<invalid></invalid>

反序列化 XML:

...
XmlMapper xmlMapper = new XmlMapper();
xmlMapper.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
xmlMapper.enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
Config appConfig = xmlMapper.readValue(new File("config-invalid.xml"), Config.class);
...



它只抛出如下的 xml: XML(config-invalid.xml):

<?xml version="1.0" encoding="UTF-8"?>
<app-config>
    <invalid></invalid>
</app-config>

【问题讨论】:

    标签: java xml jackson-databind jackson-dataformat-xml


    【解决方案1】:

    添加以下行,否则 Jackson XML 会忽略根元素。

    xmlMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
    

    我在下面提供了sn-p的代码,你可以查看。

    ........
    XmlMapper xmlMapper = new XmlMapper();
    xmlMapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
    xmlMapper.setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE);
    xmlMapper.enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
    ........
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 2021-09-22
      • 2017-03-25
      • 2014-12-31
      • 1970-01-01
      • 2021-01-30
      相关资源
      最近更新 更多