有以下两个课程:
@Data
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class Structure {
@JacksonXmlProperty
private Info info;
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
@NoArgsConstructor
@AllArgsConstructor
public class Info{
private Subinfo subinfo;
}
进行反序列化,如:
private static final XmlMapper XML_MAPPER = new XmlMapper();
Structure structure = XML_MAPPER.readValue(input, Structure.class);
哪里 input
是我的xml(见下文)
出现异常:
com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `com.test.models.Info` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('
')
此功能没有帮助:
XML_MAPPER.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
我的xml失败:
<?xml version='1.0' encoding='UTF-8' ?>
<Structure>
<Info>
</Info>
</Structure>
对于此xml,反序列化工作正常:
<?xml version='1.0' encoding='UTF-8' ?>
<Structure>
<Info/>
</Structure>
问题在于标签关闭方法: <Info/>
与<Info/>
工作正常,而
<Info>
</Info>
发生行终止符时导致异常
1条答案
按热度按时间eaf3rand1#
正如其他人在评论中已经提到的,
DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT
只将空字符串转换为null,但info元素中有空格和行分隔符。其他人无法重现你的问题,因为你要么没有提到你也使用了
XML_MAPPER.configure(MapperFeature.ACCEPT_CASE_INSENSITIVE_PROPERTIES, true)
在代码或示例中的信息中,xml实际上应该是info,否则元素将被忽略。要处理空字符串和仅包含空格和/或行分隔符的字符串,可以在解析xml之前添加以下代码:
如果要对所有元素执行此操作,可以忽略
instClass