如何处理 POST 主体 HttpServletRequest 中的 JSON

罗伯特·奎亚特科夫斯基

我有一个基于 servlet 的 REST Java 应用程序,我想管理这样的请求:

curl -X POST -d "[{"label": "001", "value": 12345}, {"label": "002", "value": 54321}]" -H 'Content-Type: application/json' xxx.com/my/endpoint

基本上我正在发送一个 JSON 数组,问题是如何正确解析它?此刻我得到的只是使用类似的东西打印它:

String body = request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));

但我希望能够处理请求中的每一对标签和值。

克里斯·马久利

解决方案 org.json 和 org.apache.commons.io

最简单的解决方案可能是执行以下操作

  1. 将输入流转换为字符串
  2. 使用构造函数用字符串填充 JSONArray
  3. 循环遍历数组
  4. 对于每次交互,从数组的迭代中获取 JSONObject
  5. 从当前对象中获取成员的值

您还可以使用 JSON 将 String 映射到一组与 JSON Schema 匹配的类。这更复杂,但它可能是替代解决方案。最大的问题可能是如何将顶级匿名数组映射到类

String string = IOUtils.toString( request.getInputStream() );
JSONArray jsonArr = new JSONArray( string );
JSONObject object;

for ( int i = 0; i < jsonArr.length(); i++ ) {
    object = jsonArr.getJSONObject( i );
    System.out.println( object.getString("label") );
    System.out.println( object.getInt("value") );
}

您需要将org.jsonorg.apache.commons.io依赖项添加到您的构建路径中。以下是如何通过 Maven 将其添加到您的项目的示例

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20210307</version>
</dependency>

<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.11.0</version>
</dependency>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使用MockMvc在响应主体中检查JSON

带有JSON主体的POST请求不会传递到springboot微服务架构中的端点

如何在MockRestServiceServer中验证JSON请求主体

如何在Golang中解密POST请求主体

如何处理Express Node.js中的主体解析器错误

使用node.js测试API如何处理无效的JSON语法请求主体

如何在OpenAPI(Swagger)中描述此POST JSON请求主体?

Swagger POST Json主体参数架构YAML

如何在Elixir Plug测试中设置POST请求的主体?

Swagger UI似乎无法使用POST json主体处理可选键

如何访问HttpServletRequest中的POST参数?

如何在React Native中构造一个POST请求主体而不是字符串化的json而不是json?

无法使用JSON主体复制POST请求

如何处理JSON中的特殊字符

如何处理JSON中的缺失数据

如何检测HttpServletRequest是否具有主体?

如何在Java中创建动态JSON主体

如何在Java中修改HttpServletRequest主体?

如何在SprayTest中使用JSON主体模拟POST请求?

如何在Java DSL中从Camel调用REST调用(带有JSON主体的POST)

如何使用Nginx和Lua处理POST请求的JSON主体?

在C#mvc中接收RESTClient POST JSON主体并将其转换为可用数据

Java:使用HttpServletRequest从POST获取JSON吗?

矩形| CustomPOST:我无法通过主体中的json数据对象发出CORS POST请求

如何处理angularJS中$ http.post的异步返回?

如何处理Twisted中的POST请求?

如何处理python中的json数据?

如何处理 recyclerView 主体 clickListener

如何处理 next.js 中的 post 请求?