【问题标题】:How to Pass Json object in GET url query string如何在 GET url 查询字符串中传递 Json 对象
【发布时间】:2015-10-08 08:29:22
【问题描述】:

我在 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 = 网址; 当我试图在控制器中获取过滤器参数值时 request.getparamter("filters"); 我得到“[object object]

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

【问题讨论】:

    标签: javascript json spring-mvc get request


    【解决方案1】:

    你可以用base64编码你的json字符串,然后在url中使用:

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

    【讨论】:

    • {window.btoa(filters);} 没有帮助。
    • @gauti 没有帮助是什么意思?
    • 我无法在控制器中将值解码为 Map。
    【解决方案2】:

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

    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"}}
    

    【讨论】:

    • 您正在 java 脚本本身中恢复 b。我的问题是让它们进入后端控制器。
    • 哎呀,我错过了这个,但总的来说仍然是相同的原理,您可以在 java 中解码 base64 字符串,然后将其解析为 JSONObject
    【解决方案3】:

    您也许可以使用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>
    

    【讨论】:

    • jQuery.param() 很好,但是有没有办法可以将该值放入控制器中的 Map 中?
    【解决方案4】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2020-11-29
      • 2013-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      相关资源
      最近更新 更多