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

如何在XML格式中插入字符串值?附JAX-RS接口代码示例

如何在JAX-RS POST接口中将字符串值以XML格式插入?

看起来你想把接收的用户参数和生成的日期转换成XML格式返回或处理,结合你的现有代码,我来一步步帮你实现:

1. 创建带JAXB注解的用户实体类

首先需要定义一个实体类,用JAXB注解映射XML结构,这样JAX-RS可以自动帮我们把对象序列化转换成XML:

import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlElement;

@XmlRootElement(name = "User")
public class User {
    private String fname;
    private String lname;
    private String mobile;
    private String city;
    private String product;
    private String date;

    // 无参构造器是JAXB序列化必需的
    public User() {}

    // 带参构造器方便快速初始化对象
    public User(String fname, String lname, String mobile, String city, String product, String date) {
        this.fname = fname;
        this.lname = lname;
        this.mobile = mobile;
        this.city = city;
        this.product = product;
        this.date = date;
    }

    // Getter和Setter方法,JAXB需要通过这些方法访问属性
    @XmlElement(name = "Firstname")
    public String getFname() {
        return fname;
    }

    public void setFname(String fname) {
        this.fname = fname;
    }

    @XmlElement(name = "Lastname")
    public String getLname() {
        return lname;
    }

    public void setLname(String lname) {
        this.lname = lname;
    }

    @XmlElement(name = "Mobile")
    public String getMobile() {
        return mobile;
    }

    public void setMobile(String mobile) {
        this.mobile = mobile;
    }

    @XmlElement(name = "City")
    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

    @XmlElement(name = "Product")
    public String getProduct() {
        return product;
    }

    public void setProduct(String product) {
        this.product = product;
    }

    @XmlElement(name = "RegistrationDate")
    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }
}

2. 修改你的JAX-RS POST接口

接下来调整你的addUser接口,把接收的参数组装成User对象,然后返回XML格式的响应:

import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.FormParam;
import javax.ws.rs.core.Response;
import java.util.Date;
import java.text.SimpleDateFormat;

@Path("/users") // 可根据你的实际接口根路径调整
public class UserResource {

    @POST 
    @Path("/add") 
    public Response addUser(
        @FormParam("fname") String fname, 
        @FormParam("lname") String lname,
        @FormParam("mobile") String mobile,
        @FormParam("city") String city, 
        @FormParam("product") String product
    ) {
        // 处理日期格式化
        SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd");
        String date = sd.format(new Date());

        // 组装用户对象
        User user = new User(fname, lname, mobile, city, product, date);

        // 返回XML格式响应,JAX-RS会自动将User对象序列化为XML
        return Response.status(Response.Status.CREATED)
                       .entity(user)
                       .build();
    }
}

3. 关键细节说明

  • JAXB注解作用:@XmlRootElement指定XML的根节点名称,@XmlElement可以自定义子节点的名称,不指定则默认使用属性名。
  • 标准XML日期格式处理:如果你需要符合XML Schema规范的日期格式(比如yyyy-MM-dd'T'HH:mm:ss),可以把User类的date字段改成XMLGregorianCalendar类型,然后按你注释里的逻辑转换:
    import javax.xml.datatype.XMLGregorianCalendar;
    import javax.xml.datatype.DatatypeFactory;
    import java.util.GregorianCalendar;
    
    // 替换接口中的日期处理代码
    GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(new Date());
    XMLGregorianCalendar xmlDate = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc);
    
    同时修改User类的date字段类型为XMLGregorianCalendar,JAXB会自动处理成标准XML日期格式。
  • REST规范响应:使用Response.Status.CREATED(201状态码)符合POST创建资源的REST设计规范。

调用这个接口后,你会得到类似这样的XML响应:

<User>
    <Firstname>John</Firstname>
    <Lastname>Doe</Lastname>
    <Mobile>1234567890</Mobile>
    <City>New York</City>
    <Product>Laptop</Product>
    <RegistrationDate>2024-05-20</RegistrationDate>
</User>

内容的提问来源于stack exchange,提问作者Mohammed Idrees

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:32:37