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

来源:互联网 发布:linux怎么安装vmtools 编辑:程序博客网 时间:2024/05/22 07:50

           世界兜兜转转,近期又回到了毕业时接触的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, 不是JSONdata: 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);

好了,到此这问题都解决了,写的可能信息不全,对于参考资料未标注,因为只作为自己遇到问题解决方案的一个记录。

原创粉丝点击