java mvc.xml_SpringMVC接收xml格式参数

问题

在对接银行过程中,银行回调时请求参数格式为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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: 这个错误是由于找不到指定的XML配置文件导致的。根据引用\[1\]和引用\[2\]的描述,报错信息中指出了找不到文件的原因。可能是文件路径不正确或者文件不存在。根据引用\[3\]的解释,这个问题可能是由于项目结构导致的。IDEA默认将.java文件和.class文件分开存放,所以ClassPathXmlApplicationContext()方法无法找到指定的XML配置文件。解决办法是将XML配置文件放在正确的位置,或者根据项目结构调整文件路径。 #### 引用[.reference_title] - *1* [spring入门第一坑,解决报错class path resource [spring.xml] cannot be opened because it does not exist......](https://blog.csdn.net/qq_42490860/article/details/129534982)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Caused by: java.io.FileNotFoundException: class path resource [datasourc.properties] cannot be opene](https://blog.csdn.net/qq_54414566/article/details/128318154)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java--IDEA中Spring配置错误:class path resource [.xml] cannot be opened because it does not exist](https://blog.csdn.net/MinggeQingchun/article/details/118193491)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值