前言:在项目中需要后台处理完数据之后post 表单提交跳转到对方的前台页面,不管是银联网银支付还是第三方网银支付。这个时候就需要使用ResponseBody方法模拟form表单提交。
代码:
/**
* 网银支付
*/
@RequestMapping("/pay")
@ResponseBody
public String doPay(){
Map<String,String> map=new HashMap<String,String>();
map.put("name","name");
StringBuffer send = new StringBuffer();
send.append("<html><head><meta http-equiv=\"content-type\" content=\"text/html;
charset=UTF-8\"/><title> </title></head><body>");
send.append("<form name=\"AutoSubmitForm\" action=\"").append(url).append("\" method=\"post\" >");
send.append(FormUtil.MaptoInput(map));
send.append("</form>");
send.append("<script type=\"text/javascript\" >");
send.append("document.AutoSubmitForm.submit();");
send.append("</script>");
send.append("</body></html>");
return send.toString();
}
formUtil工具类
/**
*将MAP拼接成input标签
* @param map
* @return
*/
public static String MaptoInput(Map<String,String> map){
StringBuffer stringBuffer=new StringBuffer();
for (String key : map.keySet()) {
String value = map.get(key);
stringBuffer.append(toInput(key, value));
}
return stringBuffer.toString();
}
/**
* 转换为表单隐藏input域
*
* @param name
* @param value
* @return
*/
public static String toInput(String name, String value) {
return new StringBuffer("<input type=\"hidden\" name=\"").append(name).append("\" value=\"").append(value).append("\" />").toString();
}