java mvc.xml_SpringMVC接收xml格式参数

在对接银行场景中,银行回调请求参数以XML格式发送,此文章详细介绍了如何使用SpringMVC处理XML格式的参数。通过创建对应的Java对象`XmlRequest`和`XmlResponse`,并使用`@RequestBody`注解接收XML,以及自定义方法将Java对象转换为带有CDATA的XML响应。在处理请求后,通过日志可以看到参数已被正常接收。
摘要由CSDN通过智能技术生成

问题

在对接银行过程中,银行回调时请求参数格式为xml,要求返回格式也为xml(CDATA包裹),利用SpringMVC该怎么处理。

测试

xml格式参数为:

提供接受参数的对象

@Data //lombok注解,无需手动添加getter/setter

@XmlRootElement(name = "xml")

@ToString //lombok注解,无需手动添加toString方法

public class XmlRequest {

private String order_id;

private String sign;

private String data;

private String uuid;

}

返回参数对象

@Data

@XmlRootElement(name = "xml")

public class XmlResponse {

private String code;

private String msg;

public XmlResponse() {

}

public XmlResponse(String code, String msg) {

this.code = code;

this.msg = msg;

}

}

处理xml格式参数接口

/**

* 处理xml格式参数

*

* @param xmlRequest

* @return

*/

@RequestMapping(value = "/handleXmlParam", produces = {"application/xml;charset=UTF-8"})

@ResponseBody

public String handleXmlParam(@RequestBody XmlRequest xmlRequest) throws Exception {

logger.info("XmlRequest:{}", xmlRequest);

XmlResponse response = new XmlResponse("1", "success");

return ojbectToXmlWithCDATA(XmlResponse.class, response);

}

/**

* Java对象转换为CDATA包裹XML

*

* @param clazz

* @param obj

* @return

* @throws Exception

*/

public static String ojbectToXmlWithCDATA(Class clazz, Object obj) throws Exception {

JAXBContext context = JAXBContext.newInstance(clazz);

// 配置OutputFormat处理CDATA

OutputFormat of = new OutputFormat();

of.setCDataElements(new String[]{"^code", "^msg"});

of.setPreserveSpace(true);

of.setIndenting(true);

// 创建序列化

ByteArrayOutputStream op = new ByteArrayOutputStream();

XMLSerializer serializer = new XMLSerializer(op, of);

SAXResult result = new SAXResult(serializer.asContentHandler());

Marshaller mar = context.createMarshaller();

mar.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

mar.marshal(obj, result);

return op.toString("utf-8");

}

使用Postman模拟请求,响应也为xml格式

7b6ae4f72af68d62ed301c48f6e3a802.png

日志打印XmlRequest对象,说明参数已经正常接收

XmlRequest:XmlRequest(order_id=m180702762500000201807031109358406949, sign=wxd2a1d0594082a206, data={"application_status":"review"}, uuid=123654978945)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值