从 HttpServletRequest 检索 JSON 对象文字

问题描述 投票:0回答:8

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

json post servlets
8个回答
68
投票

你在找这个吗?

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

57
投票

这是从

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

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

43
投票

利用 Jackson JSON 处理器

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

31
投票

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

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

MyBean myBean = gson.fromJson(reader, MyBean.class);

22
投票

还有另一种方法,使用

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);

5
投票

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

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


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

0
投票

使用以下依赖项

<dependency>
   <groupId>com.google.code.gson</groupId>
   <artifactId>gson</artifactId>
   <version>2.10.1</version>
</dependency>

版本可以是任何最新版本

我们可以使用以下代码行处理 Json 输入

BufferedReader reader = request.getReader();
Gson gson = new Gson();
MyBean myBean = gson.fromJson(reader, MyBean.class);
© www.soinside.com 2019 - 2024. All rights reserved.