http post xml 表单提交(application/x-www-form-urlencoded)
2017-12-04 10:20
441 查看
http post xml 表单提交(application/x-www-form-urlencoded)
原报文
<rminfo>
<serialid>1</serialid>
<outserialid>SP1712011545899767809_171201152853818</outserialid>
<merserialid>1209681201712011377612234</merserialid>
<paycode>3</paycode>
<reinfo></reinfo>
<channelname>**</channelname>
<productid>1152</productid>
<productname>QQ钱包JSAPI支付</productname>
<payfinishedtime>2017-12-01 15:30:58</payfinishedtime>
<extdata>
<![CDATA[cardtype=1&cardtypedesc=储蓄卡]]>
</extdata>
<extxml>
<openid>
<![CDATA[51FCF7AB8495CC6AF1D83CF37DAEAF5D]]>
</openid>
<useraccount>
<![CDATA[YLiVd8NnAGa+CAk3HoJu7M4GEnula+WfQSqPUpCkD+2e6+k55wK/Qw==]]>
</useraccount>
<bankinfo>
<shortname>CITIC</shortname>
<bankname>中信银行</bankname>
<cardtype>储蓄卡</cardtype>
</bankinfo>
</extxml>
<projectorder>SP1712011524306335970445899767809</projectorder>
<projectcode>70</projectcode>
<financecode>081001144123040103187210044139115002056164073004</financecode>
<paymentcount>0</paymentcount>
<unionorder>SP1712011524306335970445899767809</unionorder>
<operationtype>1</operationtype>
<reduceamount></reduceamount>
<awardamount></awardamount>
<realamount>22.00</realamount>
<companycode>1</companycode>
<reqcompany>1</reqcompany>
<ver>0</ver>
<fromplat>11</fromplat>
</rminfo>
能解决报文中包含等号的问题
@ResponseBody
public String commonPayCallBack(@RequestBody String req){
BaseResponse response = new BaseResponse();
try{
String reqStr = URLDecoder.decode(req,"UTF-8");
CommonPayCallbackForm request = XmlSerializerHelper.deserialize(reqStr,CommonPayCallbackForm.class);
}catch(..){..}
}
CommonPayCallbackForm.java
@XSteamAlias("rminfo") //报文头结点
public class CommonPayCallbackFrom extends BaseRequest{
private static final long serialVersionUID = 1L;
@XStreamAlias("serialid") //报文原始值
private String SerialId; //转化后的值
@XStreamAlias("outserialid")
private String outSerialId;
.....
}
XmlSerializerHelper.java
import com.thoughtworks.xstream.XStream;
public class XmlSerializerHelper implements Serialzer{
private XStream xstream;
public static <T> T deserialize(String text,Class<T> clazz){
XmlSerializerHelper xmlSerializerHelper = new XmlSerializerHelper();
return xmlSerializerHelper.deserialize(text,class,StringUtils.EMPTY);
}
@SuppressWarning("unchecked")
@Override
public <T> T deserialize(String text,Class<T> class,String dateFormat){
xstream.processAnnotations(clazz);
return (T) xstream.fromXML(text);
}
}
原报文
<rminfo>
<serialid>1</serialid>
<outserialid>SP1712011545899767809_171201152853818</outserialid>
<merserialid>1209681201712011377612234</merserialid>
<paycode>3</paycode>
<reinfo></reinfo>
<channelname>**</channelname>
<productid>1152</productid>
<productname>QQ钱包JSAPI支付</productname>
<payfinishedtime>2017-12-01 15:30:58</payfinishedtime>
<extdata>
<![CDATA[cardtype=1&cardtypedesc=储蓄卡]]>
</extdata>
<extxml>
<openid>
<![CDATA[51FCF7AB8495CC6AF1D83CF37DAEAF5D]]>
</openid>
<useraccount>
<![CDATA[YLiVd8NnAGa+CAk3HoJu7M4GEnula+WfQSqPUpCkD+2e6+k55wK/Qw==]]>
</useraccount>
<bankinfo>
<shortname>CITIC</shortname>
<bankname>中信银行</bankname>
<cardtype>储蓄卡</cardtype>
</bankinfo>
</extxml>
<projectorder>SP1712011524306335970445899767809</projectorder>
<projectcode>70</projectcode>
<financecode>081001144123040103187210044139115002056164073004</financecode>
<paymentcount>0</paymentcount>
<unionorder>SP1712011524306335970445899767809</unionorder>
<operationtype>1</operationtype>
<reduceamount></reduceamount>
<awardamount></awardamount>
<realamount>22.00</realamount>
<companycode>1</companycode>
<reqcompany>1</reqcompany>
<ver>0</ver>
<fromplat>11</fromplat>
</rminfo>
能解决报文中包含等号的问题
@ResponseBody
public String commonPayCallBack(@RequestBody String req){
BaseResponse response = new BaseResponse();
try{
String reqStr = URLDecoder.decode(req,"UTF-8");
CommonPayCallbackForm request = XmlSerializerHelper.deserialize(reqStr,CommonPayCallbackForm.class);
}catch(..){..}
}
CommonPayCallbackForm.java
@XSteamAlias("rminfo") //报文头结点
public class CommonPayCallbackFrom extends BaseRequest{
private static final long serialVersionUID = 1L;
@XStreamAlias("serialid") //报文原始值
private String SerialId; //转化后的值
@XStreamAlias("outserialid")
private String outSerialId;
.....
}
XmlSerializerHelper.java
import com.thoughtworks.xstream.XStream;
public class XmlSerializerHelper implements Serialzer{
private XStream xstream;
public static <T> T deserialize(String text,Class<T> clazz){
XmlSerializerHelper xmlSerializerHelper = new XmlSerializerHelper();
return xmlSerializerHelper.deserialize(text,class,StringUtils.EMPTY);
}
@SuppressWarning("unchecked")
@Override
public <T> T deserialize(String text,Class<T> class,String dateFormat){
xstream.processAnnotations(clazz);
return (T) xstream.fromXML(text);
}
}
相关文章推荐
- 四种常见的 POST 提交数据方式(application/x-www-form-urlencoded,multipart/form-data,application/json,text/xml)
- http以post方式上传一个文件,构造其请求头和消息报文 application/x-www-form-urlencoded multipart/form-data
- python实现http post四种请求体x-www-form-urlencoded ,form-data ,json,xml
- myxmlHttpRequset.setRequestHeader("Content-Type","application/x-www-form-urlencoded
- HTML表单提交数据中application/x-www-form-urlencoded和multipart/form-data的区别
- HTML表单提交数据中application/x-www-form-urlencoded和multipart/form-data的区别
- HTTP中application/x-www-form-urlencoded字符说明
- 关于http get和form表单post提交数据大小限制
- http-关于application/x-www-form-urlencoded等字符编码的解释说明
- HTTP中application/x-www-form-urlencoded字符说明
- 获取 request 中用POST方式"Content-type"是"application/x-www-form-urlencoded;charset=utf-8"发送的 json 数据
- 总结! http post请求 application/x-www-form-urlencoded body体数据获取不到?
- http-关于application/x-www-form-urlencoded等字符编码的解释说明
- http-关于application/x-www-form-urlencoded等字符编码的解释说明
- HTTP中application/x-www-form-urlencoded字符说明
- http-关于application/x-www-form-urlencoded等字符编码的解释说明
- angular2 post以“application/x-www-form-urlencoded”形式传参的解决办法
- 网络通信第二课 HTTP报文请求数据编码 application/x-www-form-urlencoded
- http-关于application/x-www-form-urlencoded等字符编码的解释说明
- http-关于application/x-www-form-urlencoded等字符编码的解释说明