如何在 ResponseEntity 中返回 CREATED 状态 (201 HTTP)

Art*_*yan 3 java rest http spring-mvc spring-boot

有一个Spring-MVC应用程序。在控制器中,当返回方法的结果时,我通过ResponseEntity<>. 成功时,我返回(200法规)OK-方法。但是在创建某些东西时,我想返回CREATED-method ( 201status )。我只是不明白URL在通过CREATED. 如何实施?

现在我有这样的实现:

@PostMapping("/create/dish")
    ResponseEntity<Dish> createDish(@Valid @RequestBody DishDTO dishDTO) {

        return ResponseEntity.ok(cookService.createDish(dishDTO.getDishName(), dishDTO.getAboutDish(), dishDTO.getDishType(),
                dishDTO.getCookingTime(), dishDTO.getWeight(),
                dishDTO.getDishCost(), dishDTO.getCooksId()));
    }
Run Code Online (Sandbox Code Playgroud)

我想像这样重新制作它以使其工作(现在它不起作用):

@PostMapping("/create/dish")
    ResponseEntity<Dish> createDish(@Valid @RequestBody DishDTO dishDTO) {

        return ResponseEntity.created(cookService.createDish(dishDTO.getDishName(), dishDTO.getAboutDish(), dishDTO.getDishType(),
                dishDTO.getCookingTime(), dishDTO.getWeight(),
                dishDTO.getDishCost(), dishDTO.getCooksId()));
    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

PS我根本没有前端。全部通过 Swagger 或 PostMan。

小智 9

您可以使用

    ResponseEntity.created(ServletUriComponentsBuilder.fromCurrentRequest().path("/{id}").buildAndExpand(savedObjectId).toUri()).build()
Run Code Online (Sandbox Code Playgroud)


小智 8

只需这样返回:

return new ResponseEntity<Dish>('Your Returning Dish Object', HttpStatus.CREATED)
Run Code Online (Sandbox Code Playgroud)

确保您已导入 org.springframework.http.HttpStatus


Raj*_*was 8

如果您想创建一个没有正文的 201 (CREATED) 响应,请使用:

ResponseEntity.status(HttpStatus.CREATED).build()
Run Code Online (Sandbox Code Playgroud)


小智 7

您可以使用

return new ResponseEntity(cookService.createDish(...), HttpStatus.CREATED);
Run Code Online (Sandbox Code Playgroud)

在这里阅读更多内容