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

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

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

猜你喜欢

转载自blog.csdn.net/kielin/article/details/75826553