从HttpServletRequest中检索JSON对象

我正在编写需要提取发布到servlet的对象文字的代码。 我已经研究了HttpServletRequest对象的API,但是我不清楚如何从请求中获取JSON对象,因为它不是从网页上的表单元素发布的。

任何洞察力是赞赏。

谢谢。

你在找这个吗?

@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()); } 

最简单的方法是填充您的bean将来自一个Reader对象,这可以在一个调用中完成:

 BufferedReader reader = request.getReader(); Gson gson = new Gson(); MyBean myBean = gson.fromJson(reader, MyBean.class); 

还有另外一种方法,使用org.apache.commons.io.IOUtils从请求中提取string

 String jsonString = IOUtils.toString(request.getInputStream()); 

然后你可以做任何你想做的事,用Gson把它转换成JSON或其他对象。

 JSONObject json = new JSONObject(jsonString); MyObject myObject = new Gson().fromJson(jsonString, MyObject.class); 

使用jacksonJSON处理器

  ObjectMapper mapper = new ObjectMapper(); Book book = mapper.readValue(request.getInputStream(),Book.class); 

如果你想从请求体中获取数据,上面的代码就可以工作。 但是,我觉得你遇到了同样的问题

如果正文中的数据是JSON格式,并且希望将其作为Java对象,则需要自己parsing,或者使用像google-gson这样的库来为您处理。 您应该查看项目网站上的文档和示例以了解如何使用它。 这很简单。

将请求对象中的retreived数据转换为json对象,如下所示,使用google-gson

 Gson gson = new Gson(); ABCClass c1 = gson.fromJson(data, ABCClass.class); //ABC class is a class whose strcuture matches to the data variable retrieved 

这是使用Java 8 Stream APIHttpServletRequest获取请求数据的简单方法:

 String requestData = request.getReader().lines().collect(Collectors.joining());