【问题标题】:"Required request body is missing: public org.springframework.http.ResponseEntity<?>“缺少所需的请求正文:public org.springframework.http.ResponseEntity<?>
【发布时间】:2019-10-01 14:24:48
【问题描述】:

我正在学习 Spring-Boot 的功能,并且还使用 Postman 完成了这些功能。但是当我运行代码时,我在 Postman 上收到 400 Bad Request Error,如下所示: “缺少所需的请求正文:公共 org.springframework.http.ResponseEntity”。我是否错过了某个属性或编码完全错误?

 @RestController
 @RequestMapping("/api/board")
 @CrossOrigin
public class ProjectTaskController {

@Autowired
private ProjectTaskService projectTaskService;

@PostMapping("")
public ResponseEntity<?> addPTToBoard( @Valid @RequestBody ProjectTask projectTask, BindingResult result){
    if(result.hasErrors()) {
        Map<String, String> errorMap= new HashMap<>();

        for(FieldError error: result.getFieldErrors()) {
            errorMap.put(error.getField(), error.getDefaultMessage());
        }
         return new ResponseEntity<Map<String, String>>(errorMap, HttpStatus.BAD_REQUEST);
    }

    ProjectTask newPT= projectTaskService.saveOrUpdateProjectTask(projectTask);
    return new ResponseEntity<ProjectTask>(newPT, HttpStatus.CREATED);
}

projectTask 代码,它也有 getter 和 setter。

@Entity
public class ProjectTask {

@Id
@GeneratedValue(strategy= GenerationType.IDENTITY)
private long id;

@NotBlank(message = "summary cannot be blank")
private String summary;
private String acceptanceCriteria;
private String status;

public ProjectTask() {

}

Postman request这里

【问题讨论】:

  • 你能添加你的http请求吗?您确定要传递请求正文吗?
  • @NaderHajlaoui 我已经更新了我的问题
  • 您需要提供请求正文,否则您将始终有 400 个错误请求。因为当您查看端点签名 @Valid @RequestBody ProjectTask projectTask 时,我们清楚地看到需要 projectTask 作为输入。
  • @NaderHajlaoui 我如何提供你所说的内容?
  • 调用endpoint的时候需要提供request body,如果使用postman,需要在body里面放一些数据application/json,请参考我的回答,我提供了一个示例请求代码,你可以在你的邮递员中导入它。

标签: java spring-boot postman


【解决方案1】:

因为它是一个@PostMapping,你需要像这样发出一个邮递员 POST 请求:

确保选择 rawapplication/json 的内容类型以及请求正文的 json 对象

【讨论】:

  • @rediramaj 您仍然需要将 json 对象添加到您的请求正文中。我认为它也适用于空的。例如 {}
  • 它不适用于空 json 正文,因为我们对 summary @NotBlank(message = "summary cannot be blank") 有限制
  • 我更新了截图。尝试将该 json 对象添加到请求的正文中
  • @PPetkov 我应该在方法中添加还是在 projecttask 类中添加?
  • 您将其添加到 Postman 中的 HTTP 请求中作为请求正文
【解决方案2】:

Redi 这是一个示例请求:

curl -X POST \
  'http://>>>> your endpoint url' \
  -H 'Content-Type: application/json' \
  -d '{
"summary" : "sample summary",
"acceptanceCriteria" : "blabla",
"status" : "fake status"
}'

【讨论】:

  • 您能否验证答案
【解决方案3】:

没错..!是的,你发送了一个错误的请求。您必须在 POST 请求中发送请求负载。

解决方案: 在发送 POST 请求时,请在您的情况下使用这样的正文发送。

{
"summary":"any",
"acceptance":"any",
"status":"any"
}

【讨论】:

    猜你喜欢
    • 2020-03-04
    • 2017-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2020-03-24
    相关资源
    最近更新 更多