SpringMVC 接收XML格式参数

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

先放最终结果代码

1、前端代码

 

var xmlData = "1测试测试";  
    $.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 receiverSMS(@RequestBody RestSMS restSms) {
	HashMap result = new HashMap();
	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' 。原因是配置了后,默认返回response的contentType格式为html,即直接跳转页面,因此要加上@ResponseBody,将数据写入response的body中

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

你可能感兴趣的:(java)