从HttpServletRequest检索JSON对象文字

Dar*_*aul 49 post json servlets

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

任何见解都表示赞赏.

谢谢.

小智 60

你在找这个吗?

@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());
}
Run Code Online (Sandbox Code Playgroud)

  • 这个方法确实将json表示转换为字符串,但我认为它可能不是处理json数据的最佳方法. (4认同)

Edd*_*Edd 27

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

BufferedReader reader = request.getReader();
Gson gson = new Gson();

MyBean myBean = gson.fromJson(reader, MyBean.class);
Run Code Online (Sandbox Code Playgroud)


小智 24

利用jackson JSON处理器

 ObjectMapper mapper = new ObjectMapper();
  Book book = mapper.readValue(request.getInputStream(),Book.class);
Run Code Online (Sandbox Code Playgroud)

  • 太棒了!你摇滚! (2认同)

xed*_*edo 17

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

String jsonString = IOUtils.toString(request.getInputStream());
Run Code Online (Sandbox Code Playgroud)

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

JSONObject json = new JSONObject(jsonString);
MyObject myObject = new Gson().fromJson(jsonString, MyObject.class);
Run Code Online (Sandbox Code Playgroud)


Dmi*_*bov 13

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

String requestData = request.getReader().lines().collect(Collectors.joining());
Run Code Online (Sandbox Code Playgroud)

  • 这值得更多的注意!我认为最简单的解决方案。 (2认同)

aru*_*ngh 5

如果您尝试从请求正文中获取数据,则上面的代码可以正常工作.但是,我认为你遇到了同样的问题..

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