SpringMVC接收xml格式参数
2018-07-04 13:40
344 查看
问题
在对接银行过程中,银行回调时请求参数格式为xml,要求返回格式也为xml(CDATA包裹),利用SpringMVC该怎么处理。测试
xml格式参数为:<xml> <order_id><![CDATA[201807031109358406949]]></order_id> <sign><![CDATA[f296ce56231147869aa413f1edef6403]]></sign> <data><![CDATA[{"application_status":"review"}]]></data> <uuid><![CDATA[123654978945]]></uuid> </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格式
日志打印XmlRequest对象,说明参数已经正常接收
XmlRequest:XmlRequest(order_id=m180702762500000201807031109358406949, sign=wxd2a1d0594082a206, data={"application_status":"review"}, uuid=123654978945)
相关文章推荐
- 【SpringMVC】【接收前台参数】【向前台传递参数】
- AngularJs中$http发送post或者get请求,SpringMVC后台接收不到参数值的解决办法
- springmvc接收请求参数的方法
- angular的post请求,SpringMVC后台接收不到参数值的解决方案
- springMVC接收请求参数的几种方法
- springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例
- springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例
- SpringMVC控制器接收不了PUT提交的参数的解决方案
- springmvc请求接收参数的几种方法
- springMVC请求参数接收方式
- SpringMVC 通过post接收form参数或者json参数
- SpringMVC 接收多个checkbox提交参数的问题
- SpringMVC——接收请求参数和页面传参
- springmvc接收和传递参数
- [转]学习笔记_springmvc注解形式的开发参数接收
- SpringMVC接收参数中文乱码问题
- springMVC 接收数组参数,mybatis 接收数组参数,mybatis批量插入/批量删除案例
- springmvc接收页面表单参数
- springmvc 传递和接收数组参数
- SpringMVC接收复杂集合参数