编程的魅力
首页
分类
标签
归档
动态
关于我
hyuga
2020-08-27
76
2020-08-27 19:09:29
原创
Java Controller获取PostXml请求参数
# 流文本方式 ``` /** * 获取请求中的xml参数 * * @throws IOException IOException */ public static String getXmlParams(HttpServletRequest request) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), StandardCharsets.UTF_8)); String buffer; // 存放请求内容 StringBuffer xml = new StringBuffer(); while ((buffer = br.readLine()) != null) { // 在页面中显示读取到的请求参数 xml.append(buffer); } return xml.toString(); } ``` 这种方式获取到的是xml文本字符串,需要自行解析出对应参数。 # 注解方式 还有一种方式来源:[SpringMVC接收xml格式参数](https://www.liangzl.com/get-article-detail-7044.html) 通过注解解析成xml对象,代码如下: 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) ```
JAVA
评论
发布
留言
评论