我正在编写需要提取发布到servlet的对象文字的代码。我已经研究了HttpServletRequest对象的API,但是我不清楚如何从请求中获取JSON对象,因为它不是从网页上的表单元素发布的。
任何见解都表示赞赏。
感谢。
答案 0 :(得分:58)
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
StringBuilder sb = new StringBuilder();
BufferedReader reader = request.getReader();
try {
String line;
while ((line = reader.readLine()) != null) {
sb.append(line).append('\n');
}
} finally {
reader.close();
}
System.out.println(sb.toString());
}
答案 1 :(得分:27)
最简单的方法是填充你的bean来自Reader对象,这可以在一次调用中完成:
BufferedReader reader = request.getReader();
Gson gson = new Gson();
MyBean myBean = gson.fromJson(reader, MyBean.class);
答案 2 :(得分:18)
使用jackson JSON处理器
ObjectMapper mapper = new ObjectMapper();
Book book = mapper.readValue(request.getInputStream(),Book.class);
答案 3 :(得分:16)
还有另一种方法,使用org.apache.commons.io.IOUtils
从请求中提取字符串
String jsonString = IOUtils.toString(request.getInputStream());
然后你可以随意做任何事情,将其转换为JSON
或其他Gson
对象等。
JSONObject json = new JSONObject(jsonString);
MyObject myObject = new Gson().fromJson(jsonString, MyObject.class);
答案 4 :(得分:6)
这是从HttpServletRequest
获取请求数据的简单方法
使用 Java 8 Stream API :
String requestData = request.getReader().lines().collect(Collectors.joining());
答案 5 :(得分:5)
如果您尝试从请求正文中获取数据,则上述代码可以正常工作。但是,我认为你遇到了同样的问题..
如果正文中的数据是JSON格式,并且您希望它作为Java对象,则需要自己解析它,或者使用像google-gson这样的库来为您处理它。您应该查看项目网站上的文档和示例,以了解如何使用它。这很简单。
答案 6 :(得分:0)
使用google-gson将检索到的数据从请求对象转换为json对象如下所示
Gson gson = new Gson();
ABCClass c1 = gson.fromJson(data, ABCClass.class);
//ABC class is a class whose strcuture matches to the data variable retrieved