Java中xml转bean (xml数组问题

167 阅读1分钟

问题背景:xml数组识别不到问题

尝试了好几种办法,转json 转map 转document 最后转为bean都对数组不行

问题1.jpg

问题2.jpg

问题3.jpg

采用jackson转换

<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.dataformat/jackson-dataformat-xml -->  
<dependency>  
    <groupId>com.fasterxml.jackson.dataformat</groupId>  
    <artifactId>jackson-dataformat-xml</artifactId>  
    <version>2.15.2</version>  
</dependency>
<?xml version="1.0" encoding="UTF-8" ?>  
<book id="1">  
    <name>Java核心技术</name>  

    <isbn lang="CN">1234567</isbn>  
    <diver lang="CN">diver</diver>  
    <tags>  
        <tag>  
        <tagName>java</tagName>  
        </tag>  
        <tag>  
            <tagName>python</tagName>  
        </tag>  
    </tags>  
    <pubDate/>  
</book>
@Data  
@Builder  
@AllArgsConstructor  
@NoArgsConstructor  
public class Book2 {  
    public long id;  
    public String name;  
    public String author;  
    public String isbn;  
    public List<Tag> tags;  
    public String pubDate;  

    @Data  
    @Builder  
    @AllArgsConstructor  
    @NoArgsConstructor  
    public static class Tag{  
        private String tagName;  
    }  
}

xml转bean

InputStream input = new ClassPathResource( File.separator + "book2.xml").getInputStream();  
JacksonXmlModule module = new JacksonXmlModule();  
XmlMapper mapper = new XmlMapper(module);  
Book2 book = mapper.readValue(input, Book2.class);  
System.out.println(book.id);  
System.out.println(book.name);  
System.out.println(book.author);  
System.out.println(book.isbn);  
System.out.println(book.pubDate);  
book.tags.forEach(System.out::println);

参考:www.liaoxuefeng.com/wiki/125259…

bean转xml

   Book2.Tag build = Book2.Tag.builder().tagName(".net").build();  
Book2.Tag build2 = Book2.Tag.builder().tagName("ruby").build();  
List<Book2.Tag> tagList = List.of(build, build2);  
Book2 book2 = Book2.builder()  
                .author("Horstmann")  
                .pubDate("2023")  
                .isbn("123123")  
                .id(3)  
                .name("name")  
                .tags(tagList)  
                .build();  
JacksonXmlModule module = new JacksonXmlModule();  
XmlMapper mapper = new XmlMapper(module);  
// bean转xml  
String xml = mapper.writeValueAsString(book2);  
System.out.println(xml);

无法识别的属性异常 UnrecognizedPropertyException

// 反序列化中 禁用未知属性的异常  
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

后续问题 streamReadConstraints异常

最后发现:

在自己的生产项目我引入的是2.15.2,只引入了jackson-dataformat-xml 然后看到里面调用了core包里面的一个方法, 这个方法没有,发现core的版本和jackson-dataformat-xml的不一样,但是我找了整个项目都没找到core的maven在哪配置了。

最后没办法只能把jackson-dataformat-xml讲为和core一样的版本,好像是我用的Springboot2.7.5默认的core是支持2.13.4? 这个我没研究过也不懂,如果有大佬知道可以评论告知一下。感谢

image.png

IDEA问题:dependencies工具窗口

我还发现一个问题 idea 2023.2里面没有dependencies工具窗口了,降到2023.1就有了,我好晕。。。。。 还是我2023.2他改变位置了?

问题5.jpg