如何在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
相关产品推荐
相关产品推荐

