当前位置: 首页 > 知识库问答 >
问题:

组合@PathVariable和@RequestBody

彭宜人
2023-03-14

我有DTO:

java prettyprint-override">public class UserDto {
  private Long id;
  private String name;
}

控制器:

@RestController
@RequestMapping("user")
public Class UserController {
  @PostMapping(value = "{id}")
  public String update(@PathVariable String id, @RequestBody UserDto userDto){
    userDto.setId(id);
    service.update(userDto);
  }
}

我不喜欢的是手动将id@pathvariable放入dto:userdto.setid(id);

对于正文为{name:“test”}的POST请求/user/5,如何在DTO中自动设置ID,以便您获得如下所示的DTO

{
  id: 5,
  name: "test"
}

基本上,我想要这样的东西:

@RestController
@RequestMapping("user")
public Class UserController {
  @PostMapping(value = "{id}")
  public String update(@RequestBody UserDto userDto){
    service.update(userDto);
  }
}

有没有办法做到这一点?

谢谢你!:)

编辑:这是一个老问题,仍然没有答案,所以我想为这个问题添加新的视角。

我们遇到的另一个问题是验证,即基于某个字段和id进行验证的特定定义的自定义约束。

如果我们从请求体中删除id,那么我们如何从自定义约束中访问它呢?:)

共有1个答案

晏德佑
2023-03-14

看起来这个endpoint正在执行更新操作,所以让我们后退两步。

PUT请求用于更新单个资源,在创建(至少是顶级)资源时,最好选择POST而不是PUT。相反,patch请求用于更新单个资源的部分,即只应替换资源字段的特定子集。

put请求中,主资源ID作为URL路径段传递,相关资源被替换为在有效负载中传递的表示(如果成功)。

对于有效负载,您可以提取另一个模型域类,它包含userdto的所有字段(ID除外)。

据此,我建议这样设计你的控制器:

@RestController
@RequestMapping("/api/{api}/users")
public class UserController {

  @PutMapping("/{id}")
  String update(@PathVariable String id, @RequestBody UpdateUserRequest request){
      service.update(id, request);
  }
}
 类似资料:
  • 我想做一个api,可以接受两个路径变量,其中一个可以是可选的。在这篇文章中,他们说我们可以通过使用Optional来实现这一点,但这不起作用。 这是我的控制器 在斯威格的这幅图中,需要两个参数,即使第二个参数有 由于我使用JHipster生成了我的Spring启动应用程序,当我没有给出可选参数的值时,在postman上。我得到了这个错误 如果有人能帮助我理解为什么会发生这种情况和/或我如何解决它,

  • 我使用的是Spring4.1.9.版本 配置下一个Rest控制器。 并创建了/get/{id}以某种方式隐藏/get/matrix/{vars}的映射 当我尝试通过下一个url调用它时http://localhost:8080/testmatrixvariables/get/matrix/;v1=1;v2=2;v3=3我从调试日志中获得 org.springframework.beans.Type

  • 我在ID号中包含姓名数据以及许多关联值。它看起来像这样: 我想创建名称的所有组合,不管有多少个,并将它们粘贴在一起,用逗号分隔,并在每个id中求其编号和值的总和。上述示例的预期输出为: 谢谢大家!

  • 在处理特殊字符时,和有什么区别? 被接受为空格。 在的情况下,被接受为。

  • 在spring MVC中使用中,你能给我一个简单的解释和示例吗?请包括如何键入url? 我正在努力获得正确的url以显示jsp页面。多谢了。

  • 我开始研究 OOAD,我很难找到一个 代码示例来说明如何以编程方式实现、和。(到处都有几篇文章,但它们与 C# 或 Java 有关)。我确实找到了一两个例子,但它们都与我的导师的指示相冲突,我很困惑。 我的理解是,在: < li >关联:Foo有一个指向Bar对象的指针作为数据成员 < li >聚合:Foo有一个指向Bar对象的指针,Bar的数据被深度复制到该指针中。 < li >组成:Foo有一