SpringMVC 接收XML格式参数

今天在写接收XML格式的controller方法时,遇到一些问题,在此记录下:

先放最终结果代码

1、前端代码

 

var xmlData = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Request><smsType>1</smsType><fromNum>测试测试</fromNum></Request>";  
    $.ajax("../../ReceiverRestSMS/receiverSMS.do",// 发送请求的URL字符串。  
            {  
             type : "POST", //  请求方式 POST或GET  
             contentType:"application/xml", //  发送信息至服务器时的内容编码类型  
             // 发送到服务器的数据。  
             data: xmlData,  
             async:  true , // 默认设置下,所有请求均为异步请求。如果设置为false,则发送同步请求  

    });  

 

2、后台代码:

 

 

@RequestMapping(value ="/receiverSMS",method=RequestMethod.POST,consumes="application/xml")
@ResponseBody
public Map<String,Object> receiverSMS(@RequestBody RestSMS restSms) {
	HashMap<String,Object> result = new HashMap<String,Object>();
	logger.info("回调参数:"+restSms.toString());
	
	return result;
}

@XmlRootElement(name ="Request")  
public class RestSMS {
	private String smsType;
	private String fromNum;
	private String content;
	private String status;
	private String deliverCode;
	public String getSmsType() {
		return smsType;
	}
	public void setSmsType(String smsType) {
		this.smsType = smsType;
	}
	public String getFromNum() {
		return fromNum;
	}
	public void setFromNum(String fromNum) {
		this.fromNum = fromNum;
	}
	public String getContent() {
		return content;
	}
	public void setContent(String content) {
		this.content = content;
	}
	public String getStatus() {
		return status;
	}
	public void setStatus(String status) {
		this.status = status;
	}
	public String getDeliverCode() {
		return deliverCode;
	}
	public void setDeliverCode(String deliverCode) {
		this.deliverCode = deliverCode;
	}
	
	@Override
	public String toString() {
		return "[smsType="+smsType+",fromNum="+fromNum+",content="+content+",status="+status+",deliverCode="+deliverCode+"]";
	}

}

 

问题1:请求状态码为415,即后台转换XML时出错,原因是实体类没加@XmlRootElement(name ="Request") ,该参数可以将实体类指定为xml根节点,即让根节点下的子节点转换为实体类对应属性,若不加name参数,则根节点名称必须为实体类名称。

 

问题2:SpringMVC抛出异常:Could not resolve view with name 'ReceiverRestSMS/receiverSMS' in servlet with name 'springmvc' 。原因是配置了<property name="contentType" value="text/html" />后,默认返回response的contentType格式为html,即直接跳转页面,因此要加上@ResponseBody,将数据写入response的body中

注意:controller方法接收参数格式为xml时,方法头部注解最好要加上consumes="application/xml"

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值