You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot JPA中XML数据无法存入H2内存数据库的解决问询

问题解决:Spring Boot JPA无法解析XML请求数据

核心问题分析

  1. XML根节点与实体类不匹配:提交的XML根节点是<Optional>,但接口接收的是Employee实体类,Jackson XML转换器无法完成映射。
  2. 实体类缺少Getter/Setter方法:Spring消息转换器需要通过访问器方法读写属性,无此方法则无法为实体赋值。
  3. 可能缺少XML序列化依赖:若项目未引入Jackson XML支持,无法处理application/xml格式的请求。

解决方案步骤

1. 修正XML请求的根节点

将请求XML的根节点改为与实体类一致的<Employee>:

<Employee>
    <empId>107</empId>
    <firstName>Aston</firstName>
    <secondName>Martin</secondName>
</Employee>

2. 为Employee实体类添加Getter/Setter方法

JPA实体必须提供属性访问器,否则消息转换器无法完成赋值:

package com.webprj.model;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;

@Entity
public class Employee 
{
    @Id
    private int empId;
    private String firstName;
    private String secondName;

    // Getter方法
    public int getEmpId() {
        return empId;
    }

    public String getFirstName() {
        return firstName;
    }

    public String getSecondName() {
        return secondName;
    }

    // Setter方法
    public void setEmpId(int empId) {
        this.empId = empId;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public void setSecondName(String secondName) {
        this.secondName = secondName;
    }
}

3. 添加Jackson XML序列化依赖

确保项目引入XML格式处理的依赖:
Maven(pom.xml):

<dependency>
    <groupId>com.fasterxml.jackson.dataformat</groupId>
    <artifactId>jackson-dataformat-xml</artifactId>
</dependency>

Gradle(build.gradle):

implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml'

4. (可选)添加XML注解增强映射

若需自定义XML节点名称或映射规则,可添加Jackson XML注解:

package com.webprj.model;

import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlRootElement;

@Entity
@JacksonXmlRootElement(localName = "Employee") // 显式指定XML根节点名称
public class Employee 
{
    @Id
    private int empId;
    private String firstName;
    private String secondName;

    // Getter和Setter方法...
}

验证结果

重启应用后发送修正后的XML POST请求,数据将被正确解析并存入H2数据库,返回结果如下:

{
    "empId": 107,
    "firstName": "Aston",
    "secondName": "Martin"
}

内容的提问来源于stack exchange,提问作者Shankar Raj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:13:13