将多个参数作为一个http查询参数传递的最佳方法是什么?

时间:2017-01-10 18:59:56

标签: java http url oauth salesforce

我有使用SalesForce Server OAuth Authentication Flow进行用户身份验证的java Web应用程序(servlet)。此OAuth身份验证提供“状态”查询参数以传递回调上的任何数据。我有一堆参数,我想通过这个“状态”查询参数。最好的方法是什么?特别是在java中?

或者换句话说,将数组或映射作为单个http查询参数传递的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

您可以将所有内容放在json或xml格式或任何其他格式中,然后在base64中编码为一个大字符串。请注意,params可以对某些浏览器/ Web服务器施加一些硬限制。

答案 1 :(得分:1)

所以,我这样做了。感谢你们!以下是一些代码片段,用于说明它对我有用:

    // forming state query parameter
    Map<String, String> stateMap = new HashMap<String, String>();

    stateMap.put("1", "111");
    stateMap.put("2", "222");
    stateMap.put("3", "333");

    JSONObject jsonObject = new JSONObject(stateMap);
    String stateJSON = jsonObject.toString();

    System.out.println("stateJSON: " + stateJSON);

    String stateQueryParam = Base64.encodeBase64String(stateJSON.getBytes());

    System.out.println("stateQueryParam: " + stateQueryParam);

    // getting map from state query param
    ObjectMapper objectMapper = new ObjectMapper();
    stateMap = objectMapper.readValue(Base64.decodeBase64(stateQueryParam.getBytes()), LinkedHashMap.class);

    System.out.println("stateMap: " + stateMap);

这是输出:

stateJSON: {"1":"111","2":"222","3":"333"}
stateQueryParam: eyIxIjoiMTExIiwiMiI6IjIyMiIsIjMiOiIzMzMifQ==

stateMap: {1=111, 2=222, 3=333}