Method 为POST跨域时Client端请求及server端获取client请求的参数
2017-07-23 10:16
429 查看
世界兜兜转转,近期又回到了毕业时接触的java项目了。 从.net到java,似乎一切又是新的,记录一些工作中遇到的问题。
应用程序跨域时,前端发现POST数据一直返回415错误。调查后发现是跨域问题导致。那么怎么解决呢?
有两种方式,一种是前端请求方式改变,另一种是后端处理改变。
1. 先说前端改变:
对于第一种JSONP传递的参数,可以和处理GET时一样
好了,到此这问题都解决了,写的可能信息不全,对于参考资料未标注,因为只作为自己遇到问题解决方案的一个记录。
应用程序跨域时,前端发现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);
好了,到此这问题都解决了,写的可能信息不全,对于参考资料未标注,因为只作为自己遇到问题解决方案的一个记录。
相关文章推荐
- go client http post upload上传及 server 参数获取
- Yaws(erlang web服务器框架) 学习记录之获取GET/POST请求参数
- java获取GET和POST请求参数
- 【http】get/post 获取请求参数
- $.ajax()post方式请求参数无法传递,request.getParameter()无法获取
- HttpClient get和HttpClient Post请求的方式获取服务器的返回数据
- restful接口实现跨域访问,以及get请求对象参数对象封装,post请求
- AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
- AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
- jersey client 发送Post请求 【带参数】
- servlet如何获取post请求的参数
- AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
- 【httplistener监听获取Post请求参数】
- CodeIgniter RestServer中put请求获取不到参数的问题解决
- HttpClient PostMethod提交自定义参数
- AJAX POST请求中参数以form data和request payload形式在servlet中的获取方式
- 利用HttpClient的POST方式发起带参数的请求时,点击注册按钮无反应状态分析
- http get或者post请求获取参数
- 跨域请求:Fetch实现跨域请求与POST方式参数提交
- 【httplistener监听获取Post请求参数】