如何在Java中将HTTP请求体转换为JSON对象

emp*_*e29 10 java json http sling

我正在尝试找到一个Java lib/api,它允许我将HTTP Request POST主体的内容转换为JSON对象.

理想情况下,我想使用Apache Sling库(因为它们在我的容器中自然暴露).

最接近我发现它:org.apache.sling.commons.json.http将标头转换为JSON.

HTTP Post主体采用格式; key1=value1&key2=value2&..&keyn=valueN所以我认为那里有一些东西,但我找不到它.

如果某些东西不存在,我可能只需要使用custom JSONTokener(org.apache.sling.commons.json.JSONTokener)来执行此操作.思考?

谢谢

mae*_*ics 12

假设您正在使用HttpServletjson- like这样的JSON库,您可以执行以下操作:

public JSONObject requestParamsToJSON(ServletRequest req) {
  JSONObject jsonObj = new JSONObject();
  Map<String,String[]> params = req.getParameterMap();
  for (Map.Entry<String,String[]> entry : params.entrySet()) {
    String v[] = entry.getValue();
    Object o = (v.length == 1) ? v[0] : v;
    jsonObj.put(entry.getKey(), o);
  }
  return jsonObj;
}
Run Code Online (Sandbox Code Playgroud)

使用示例:

public void doPost(HttpServletRequest req, HttpServletResponse res) {
  JSONObject jsonObj = requestParamsToJSON(req);
  // Now "jsonObj" is populated with the request parameters.
  // e.g. {"key1":"value1", "key2":["value2a", "value2b"], ...}
}
Run Code Online (Sandbox Code Playgroud)

  • 事实证明你可以这样做:JSONObject json = new JSONObject(slingHttpServletRequest.getParameterMap()); 同样 - 你的方法确实可以更好地控制允许进入json对象的内容(例如引入白/黑列表) - 这很好. (3认同)