Как преобразовать тело HTTP-запроса в объект JSON в Java
Я пытаюсь найти Java lib / api, который позволит мне превратить содержимое тела HTTP-запроса POST в объект JSON.
в идеале я хотел бы использовать Apache Sling библиотека (поскольку они отображаются в моем контейнере естественно).
ближайший я нашел это: org.apache.sling.commons.json.http
который преобразует заголовок в JSON.
тела HTTP Post находятся в формате;key1=value1&key2=value2&..&keyn=valueN
поэтому я предполагаю, что там что-то есть, но я не смог его найти.
возможно, мне просто придется использовать пользовательский JSONTokener
(org.apache.sling.commons.json.JSONTokener
), если что-то уже не существует. Мысли?
спасибо
5 ответов
предполагая, что вы используете он полностью реализует интерфейс и библиотека JSON, как 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;
}
пример использования:
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"], ...}
}
Джексон также является хорошим вариантом-его широко используется весной. Вот учебник:http://wiki.fasterxml.com/JacksonInFiveMinutes
Я рекомендую попробовать Apache Commons Beanutils.
ServeltRequest request;
Map map = request.getParameterMap();
MyObject object = new MyObject();
BeanUtils.populate(object, map);
String json = object.toJSON() //using any JSON library
извините за то, что это собственный ответ, но, очевидно, моя репутация не позволяет мне просто добавить комментарий к ответу Как преобразовать тело HTTP-запроса в объект JSON в Java из maerics.
Я бы также повторил параметры запроса, но вместо использования произвольной библиотеки json используйте JSONObject, предоставляемый sling. http://sling.apache.org/apidocs/sling6/org/apache/sling/commons/json/JSONObject.html
Используйте Gson. С помощью этого вы можете создать класс с частными переменными, которые представляют нужные вам данные: например.
meta:{
name:"Example"
firstname:"Example2"
}
data:[
{
title:"ecaetra"
description:"qwerty"
}
...
]
объект Json может быть восстановлен следующим образом:
public class RetrieveData {
private Meta meta;
private List<Data> data;
public Meta getMeta(){
return meta;
}
public List<Data> getData(){
return data;
}
}
public class Meta {
private String name;
private String firstname;
public String getName(){
return name;
}
public String getFirstName(){
return firstname;
}
}
public class Data {
private String title;
private String description;
public String getTitle(){
return title;
}
public String getDescription(){
return description;
}
}
и ваша инструкция проста. Содержимое-это содержимое вашей страницы, вы можете получить его с помощью Asynctask.
Object o = new Gson().fromJson(Content, RetrieveData.class);
data = (RetrieveData)o;
// Get Meta
data.getName(); // Example
data.getFirstName(); // Example2
// Get Data
data.get(0).getTitle(); // position 0 : ecaetra
data.get(0).getDescription(); // position 0 : qwerty