如何在 GET url 查询字符串中传递 Json 对象

How to Pass Json object in GET url query string

我在 javascript、

中有一个 json 对象
filters = Object {assetType: "CAR~LIGHT TRUCK", bodyType: "SEDAN~SPORT UTIL"}

我需要在查询字符串中传递这些值以及另外 5 个字符串值。

url = '/starHome/exportToCsv/'+tier+'/?period='+period+'&level2='+level2+'&level3='+level3+'&level4='+level4+'&filters='+filters;

window.location.href = url; 当我试图在控制器中获取过滤器参数值时 request.getparamter("filters"); 我得到“[object object]

如何将这个值传递给控制器​​?。 我有一个 pojo class 包含所有这些字段。我可以利用那个 class 吗?

您可以在 base64 中对 json 字符串进行编码,然后在 url:

中使用它

https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/btoa

您也许可以使用 jQuery.param()

    <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
    <script type="text/javascript">
    var filters = {assetType: "CAR~LIGHT TRUCK", bodyType: "SEDAN~SPORT UTIL"};
    filters = jQuery.param( filters );
    console.log("filters ", filters );
    //filters  assetType=CAR~LIGHT+TRUCK&bodyType=SEDAN~SPORT+UTIL

    url = '/starHome/exportToCsv/'+tier+'/?period='+period+'&level2='+level2+'&level3='+level3+'&level4='+level4+'&filters='+filters;
    </script>

谢谢大家, 我用过 JSON.stringify(filters); 在控制器中

String filtersString = request.getParameter("filters");
Map<String,Object> result = new ObjectMapper().readValue(filtersString, HashMap.class);

如果有更好的方法,欢迎回复。

我发现以下是迄今为止使用 Javascript 的最佳解决方案

var a = {a:'foo',b:[1,2,3],g: {q:"8798"}};

var b = window.btoa(JSON.stringify(a)); 

console.log(b) // output eyJhIjoiZm9vIiwiYiI6WzEsMiwzXSwiZyI6eyJxIjoiODc5OCJ9fQ

// restore b again 
console.log(JSON.parse(window.atob(b))); // output : {a:'foo',b:[1,2,3],g: {q:"8798"}}