记录一下接收xml参数的坑
简单类型xml
1.使用@XmlRootElement注解指定根元素名称,不指定默认使用类名和属性名(小写),可以使用name属性指定 根元素和子元素的标签名
@Data
@XmlRootElement
public class UserXml {
private String name;
private String age;
private String address;
}
2.在controller 使用@RequestBody 接收请求参数
@GetMapping(value = "/userxml",produces = MediaType.APPLICATION_XML_VALUE)
public UserXml userXml(@RequestBody UserXml userXml){
return userXml;
}
3.返回xml报文
在@xxxMapping中添加属性produces = MediaType.APPLICATION_XML_VALUE,即可返回xml形式的报文
@GetMapping(value = "/userxml",produces = MediaType.APPLICATION_XML_VALUE)
public UserXml userXml(){
UserXml userXml=new UserXml();
userXml.setName("张三");
userXml.setAge("18");
userXml.setAddress("北京");
return userXml;
}
特别注意
测试发现,当使用 例如@XmlRootElement(name=“Root”) 时,如果name=“Root” 是大写的情况下,会无法映射到实体类,也无法返回xml报文,属性值都是null,目前原因不名
如果必须使用大写形式,
解决办法,改为使用@JacksonXmlRootElement和@JacksonXmlProperty 来映射xml参数,使用localName = “Root” 指定标签名,需要特别注意,使用这种方式时,属性名应该遵循驼峰命名,即首字母小写,如果大写,在返回xml报文时会造成标签重复的问题
@Data
@JacksonXmlRootElement
public class UserXml {
@JacksonXmlProperty(localName = "Name")
private String name;
@JacksonXmlProperty(localName = "Age")
private String age;
@JacksonXmlProperty(localName = "Address")
private String address;
}
复杂类型xml
例如:文章来源:https://www.toymoban.com/news/detail-594902.html
实体类嵌套元素,Root根元素下有RequestHead和RequestBody元素,而这两个元素下各自包含了自己的子元素文章来源地址https://www.toymoban.com/news/detail-594902.html
@JacksonXmlRootElement(localName = "Root")
@Data
public class CABXXmlInfoResult implements Serializable {
@JacksonXmlProperty(localName = "RequestHead")
private RequestHead requestHead;
@JacksonXmlProperty(localName = "RequestBody")
private RequestBody requestBody;
@Data
public static class RequestHead {
@JacksonXmlProperty(localName = "Sign")
private String sign;
}
@Data
public static class RequestBody {
/**
* 保险公司编码 CABX
*/
@JacksonXmlProperty(localName = "InsuranceCode")
private String insuranceCode;
/**
* 投保单号
*/
@JacksonXmlProperty(localName = "ProposalNo")
private String proposalNo;
/**
* 支付状态 true:成功
* false:失败
*/
@JacksonXmlProperty(localName = "PayState")
private String payState;
/**
* 承保结果 成功/失败原因
*/
@JacksonXmlProperty(localName = "Message")
private String message;
/**
* 保单号
*/
@JacksonXmlProperty(localName = "PolicyNo")
private String policyNo;
/**
* 电子保单下载地址
*/
@JacksonXmlProperty(localName = "Epolicy")
private String epolicy;
/**
* 电子保函下载地址
*/
@JacksonXmlProperty(localName = "Gpolicy")
private String gpolicy;
/**
* 银行支付流水号 成功且基本户返回
*/
@JacksonXmlProperty(localName = "PaySerialNumber")
private String paySerialNumber;
/**
* 银行名称
*/
@JacksonXmlProperty(localName = "PayBankacclocalName")
private String payBankacclocalName;
/**
* 银行账号
*/
@JacksonXmlProperty(localName = "PayBankaccNo")
private String payBankaccNo;
/**
* 支付时间 yyyy-MM-dd HH:mm:ss
*/
@JacksonXmlProperty(localName = "PayTime")
private String payTime;
/**
* 支付方式 1:易宝对公支付
* 2:支票支付
*/
@JacksonXmlProperty(localName = "PayType")
private String payType;
}
}
到了这里,关于【SpringBoot 后台接收XML类型参数和返回XML类型参数】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!