首页 > 解决方案 > @RequestBody 使用多个参数

问题描述

以前可能已经问过这个问题,但是我一生都无法使用我可以在网上找到的类似示例来整理我对 spring 注释的理解。

我有一个发布方法:

   @PostMapping(value = "/changeFriendName", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> changeFriendName(@RequestBody Friend friendNameToChange, @RequestBody String inputName){
    System.out.println(friendNameToChange.getName());
    return new ResponseEntity<>("Hello " +friendNameToChange.getName() + ", lets change to = " + inputName, HttpStatus.OK);
}

在哪里:

public class Friend {

//@NotNull
String name;
//LocalDateTime lastContact;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

}

试图得到一些理解,所以要保持简单。

一旦我有第二个输入参数,我似乎无法理解如何使用邮递员创建 JSON 有效负载以获得 OK 响应。

我有很多东西,最新的有效载荷:

{
    "object":{
        "name":"roberto"
    },
    "string":"dave"
}

我似乎无法理解如何从有效负载中解析 POJO。

在此先感谢您的帮助!

标签: java

解决方案


我不相信你可以声明多个@RequestBody参数。您将需要创建一个将两者结合起来的新课程;例如,

public class RequestDto {

  private Friend friend;
  private String inputName;

  // ... getters, setters ...

}

然后你可以做

@PostMapping(value = "/changeFriendName", consumes = MediaType.APPLICATION_JSON_VALUE)
public ResponseEntity<String> changeFriendName(@RequestBody RequestDto requestDto){
    return new ResponseEntity<>(
        "Hello " + requestDto.getFriend().getName() + ", lets change to = " + requestDto.getInputName(),
        HttpStatus.OK);
}

推荐阅读