您的位置:首页 > 编程语言 > Java开发

Method 为POST跨域时Client端请求及server端获取client请求的参数

2017-07-23 10:16 429 查看
           世界兜兜转转,近期又回到了毕业时接触的java项目了。  从.net到java,似乎一切又是新的,记录一些工作中遇到的问题。

            应用程序跨域时,前端发现POST数据一直返回415错误。调查后发现是跨域问题导致。那么怎么解决呢?

            有两种方式,一种是前端请求方式改变,另一种是后端处理改变。

           1. 先说前端改变:

<script>

$(document).ready(function(){

var url = "http://10.32.212.22:8080/Test/AddTask";
var objArray = [{"errorType":"errorCode","errorValue":"FXD300070"},{"errorType":"Title","errorValue":"继续支付金额有误"}];

var data = {
"jobName":"GeneralJob2017",
"appId":"720203;720206;720207;",
"interval":"180",
"level":"error",
"jobType":"1"//,
//"errorDetails":objArray

};
//data.errorDetails = JSON.stringify(objArray) //data里面又包含数组参数时,请用JSON.stringify

$.ajax({
url:url,
type:'post',
dataType: "jsonp",  //注意这里是JSONP, 不是JSON
data: data,  //JSON.stringify放这里试

success:function(data){
alert(data);
},
error:function(XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}});
});
</script>
2.   后端设置CORSFilter请求过滤,重写其中方法,这样前端可以直接以JSON格式dataType请求

@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;
 httpResponse.addHeader("Access-Control-Allow-Origin", "*");
filterChain.doFilter(servletRequest, servletResponse);
}
    以上两种方式已经解决基本解决了问题,那么,对于后端怎么处理前端post过来的参数呢?

对于第一种JSONP传递的参数,可以和处理GET时一样

Server端获取参数和Get方式一样:
public String getPostParameters(HttpServletRequest req) {
Map<String, String[]> mapP = req.getParameterMap();

JSONObject obj = JSONObject.fromObject(mapP);
return obj.toString();

}
对于第二种后端通过CORSFilter处理,前端通过JSON格式dataType请求,后面可以通过以下两种方式处理参数

public  String getPostParams(HttpServletRequest request) {
String queryString = "";
Map<String, String[]> params = request.getParameterMap();
params.toString();
for (String key : params.keySet()) {
String[] values = params.get(key);
for (int i = 0; i < values.length; i++) {
String value = values[i];
queryString = key;
queryString += key + "=" + value + "&";
}
}
queryString = queryString.substring(0, queryString.length() - 1);
return queryString;
}
另外也可以创建一个类,然后把POST过来的参数转化为类:

JSONObject object = JSONObject.fromObject(parameterStr);
ParameterClass c = (ParameterClass) object.toBean(object,ParameterClass .class);


好了,到此这问题都解决了,写的可能信息不全,对于参考资料未标注,因为只作为自己遇到问题解决方案的一个记录。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息