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

What is the best way to pass multiply parameters as one http query parameter?

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

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

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

所以,我是这样做的。谢谢你们!这里有一些代码片段来说明它是如何为我工作的:

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