java - 如何在 Spring Boot 中存储一个 xml 节点的多个值?

标签 java xml spring spring-boot jackson

我收到来自 Web 服务的 XML 响应,格式如下:

<main-node>
    <node>
        <id>101</id>
        <name>Test</name>
        <address>test</address>
        <address>test1</address>
    </node>
    <node>
       <id>102</id>
       <name>Jack</name>
       <address>New York</address>
       <address>London</address>
       <address>Canberra</address>
       <address>Cape Town</address>
    </node>
</main-node>

我创建了 POJO 类并很好地映射了它们,并且能够将值存储在 MySQL 数据库中。但是,对于 address 字段,仅保存其中一个地址。如何在数据库中存储多个值?

这是我用于前面提到的 XML 结构的 POJO:

@Entity
@XmlRootElement(name="node")
public class Node{
    @Id
    private int id;
    private String name;
    private String address;
    //Getters and Setters
}

我已经尝试使用 String[] 作为 address 字段,但这也不起作用。

最佳答案

问题是address字段将映射到名为 address 的列在MySQL中,数据库列只能包含一个值。

解决方案是创建一对多关系,这意味着您需要一个单独的 node_address你旁边的 table node表,至少包含 node_idaddress字段。

Schema of one-to-many relationship

现在,对于 JPA 映射,您可以选择完整的 @OneToMany/@ManyToOne映射,但在本例中,使用 @ElementCollection可能更有趣:

@Entity
@XmlRootElement(name = "node")
public class Node {
    @Id
    private int id;
    private String name;
    @ElementCollection
    @CollectionTable(
        name="NODE_ADDRESS",
        joinColumns=@JoinColumn(name="NODE_ID")
    )
    @Column(name = "ADDRESS")
    private List<String> address;

    // Getters + Setters
}

由于 Hibernate(默认的 JPA 提供程序)无法映射到数组,因此您需要使用 List<String>对于address field 。如果您不喜欢这样,则必须创建多个类,一个用于 XML 映射,另一个用于 JPA 映射。

Note: You're missing a mapping for your element, so you'll have to create a MainNode class as well.

关于java - 如何在 Spring Boot 中存储一个 xml 节点的多个值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52164940/

相关文章:

java - 通过线程与多客户端服务器

c# - 反序列化 XML 为集合属性返回 null

javascript - 在 PHP 中读取 KML 文件,将其强制写入一行,然后使用 Google map 的 parseKMLString 对其进行解析

java - 我如何在 Spring Boot/MVC 中创建错误处理程序(404、500...)

java - :inputTextarea doesn't work in rich faces

java - 如何将 2d 阵列旋转小于 90°,以获得最佳近似值?

java - 冒泡排序并行数组

php - 未定义 simpleXML 和实体的问题

java - Spring RequestBody需要加载嵌套的Object

java - 加载 ContextLoaderListener 时出现 ClassNotFoundException