【问题标题】:Reading the contents of a body of a POST request in java (using REST)在 java 中读取 POST 请求正文的内容(使用 REST)
【发布时间】:2019-08-22 12:33:06
【问题描述】:

假设我使用 POSTMAN 发出一个 POST 请求,并且有一个 json 格式的正文。我想读取正文的内容并将其传递给一个方法。怎么做 ?

我可以看到有@QueryParam、@PathParam、@HeaderParam 等注解用于读取参数。我不明白如何阅读正文。

说身体是
{ "param1":"value1", "param2":"value2", "param3":"value3", }

服务器端java代码:

@POST

@Path("/myresource")

public Response addParams( String param1, String param2, String param3) { do somthing. }

所以我希望从 requestbody 中读取这个 param1、param2、parmam3 值。有可能吗?

【问题讨论】:

  • 您可以创建一个表示您的 JSON 结构的对象(搜索“数据传输对象”或“值对象”),并让 JEE 将 JSON 主体映射到您可以按需要处理的对象:@987654329 @

标签: rest


【解决方案1】:

定义一个类:

public class Foo {

    String param1;
    String param2;
    String param3;

    // Default constructor, getters and setters
}

然后按如下方式使用:

@POST
@Path("/myresource")
@Consumes(MediaType.APPLICATION_JSON)
public Response addParams(Foo params) {

    String param1 = params.getParam1();
    String param2 = params.getParam2();
    String param3 = params.getParam3();

    ...
}

或者,使用Map<String, String>:

@POST
@Path("/myresource")
@Consumes(MediaType.APPLICATION_JSON)
public Response addParams(Map<String, String> params) {

    String param1 = params.get("param1");
    String param2 = params.get("param2");
    String param3 = params.get("param3");

    ...
}

只需确保您在应用程序中配置了 JSON 解析器,例如 Jackson 或 MOXy。

【讨论】:

  • 我完全同意这一点,但是我不能在某种情况下定义一个类(因为我被要求不要在生产代码中进行太多更改/对象..)我想知道你是否真的需要一个班级 ?我可以不只写“公共响应 addParams(Object foo) 并继续吗?
  • @adityazagade 为什么不能创建类?怎么了?无论如何,请查看我的更新。
  • 应该可以!非常感谢!
【解决方案2】:

不知道您使用哪个 Java 框架,但您可以在您的方法中声明一个 @RequestBody 参数并将其“映射”到将对应于传入 JSON 的 POJO(就像 @Smutje 在评论中所说)。

例如,在Spring中,我们是这样做的,

@PostMapping(value = "/example",
            consumes = MediaType.APPLICATION_JSON_UTF8_VALUE,
            produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 public ResponseEntity postExample(@RequestBody ExamplePOJO examplePOJO) {

 // Do something
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-07
  • 2020-09-27
  • 1970-01-01
  • 2018-07-06
  • 1970-01-01
  • 2017-10-14
相关资源
最近更新 更多