Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring 如何处理post和put请求数据验证_Spring_Spring Boot - Fatal编程技术网

Spring 如何处理post和put请求数据验证

Spring 如何处理post和put请求数据验证,spring,spring-boot,Spring,Spring Boot,我在/user资源的POST和PUT控制器中使用了以下用户详细信息模型 公共类用户详细信息{ @不空白 私有字符串用户名; @不空白 私有字符串密码; @不空白 私有字符串名; @不空白 私有字符串lastName; @不空白 专用字符串网卡; @NotNull 私有整数roleId; //构造函数和getter设置器 } @PostMapping(“/org/employee”) public void createEmployee(@RequestBody EmployeeDetailsM

我在
/user
资源的
POST
PUT
控制器中使用了以下用户详细信息模型

公共类用户详细信息{
@不空白
私有字符串用户名;
@不空白
私有字符串密码;
@不空白
私有字符串名;
@不空白
私有字符串lastName;
@不空白
专用字符串网卡;
@NotNull
私有整数roleId;
//构造函数和getter设置器
}
@PostMapping(“/org/employee”)
public void createEmployee(@RequestBody EmployeeDetailsModel empDetails){
employeeService.createUser(empDetails);
}
@PutMapping(“/org/employee”)
public void updateEmployee(@RequestBody EmployeeDetailsModel empDetails){
employeeService.updateUser(empDetails);
}
这里,
UserDetails
具有
@NotNull
@NotBlank
验证
POST
可以正常工作,因为要创建用户,所有详细信息都是必需的。但是当使用
PUT
更新时,我不需要填写
UserDetails
的所有属性

所以我的问题是

  • 这种情况是如何处理的?我们是否通常强制客户发送所有这些详细信息,无论它们是否更改
  • 是否可以仅为特定端点禁用请求正文验证,还是必须创建外观相同但没有验证的单独模型

看到您的帖子,我可以推断您对修改资源感兴趣 要做到这一点,您应该使用补丁方法,而不是PUT。 在PUT中,您需要发送整个数据,因为它是用来替换资源的,而不是补丁

在PUT或补丁的情况下,我们需要确保我们有一个现有的资源。因此,在保存之前,我们必须从数据存储中获取原始资源。然后,我们可以借助实体本身的验证规则对其进行修改

所以你的代码应该是这样的

考虑到您有一个名为

雇员安置所

    @PutMapping("/org/employee/{id}")
    public void updateEmployee(@RequestBody EmployeeDetailsModel empDetails, @PathVariable("id") int id) {
        Optional<Employee> emp = employeeRepo.findById(id);
        if (emp.isPresent()) {
            // update the new values using setters
            // Finally update the resource.
            employeeService.updateUser(empDetails);
        } else {
            throw new ResourceNotFoundException("Your custom msg");
        }

    }
@PutMapping(“/org/employee/{id}”)
public void updateEmployee(@RequestBody EmployeeDetailsModel empDetails,@PathVariable(“id”)int-id){
可选emp=employeeRepo.findById(id);
if(emp.isPresent()){
//使用setter更新新值
//最后更新资源。
employeeService.updateUser(empDetails);
}否则{
抛出新的ResourceNotFoundException(“您的自定义消息”);
}
}

存储库代码应该放在服务方法ie updateUser中,但我把它放在这里只是为了演示。

以前不是开发人员,但我从未见过RESTful服务使用补丁,但显然有这样的东西。跟随帮助我得到了一个想法