如何使用Spring验证大型对象上的修补程序请求

如何使用Spring验证大型对象上的修补程序请求,spring,rest,spring-boot,spring-mvc,Spring,Rest,Spring Boot,Spring Mvc,我似乎找不到很多关于这个的信息。我已经读到,PUT请求应该用于用更新的资源替换整个资源,而PATCH请求应该仅用于更新您想要更改的字段。但假设我有一个非常大的对象,其中有很多嵌套的字段和对象,我只想更新其中一个嵌套对象中的特定字段,而不必重新提交整个对象(因为它太大了)。我必须创建一个补丁端点。我将如何在SpringRESTAPI中验证这样一个端点?我无法理解端点如何知道它接收到了哪些字段或嵌套字段,以及如何验证它们,并让它为我可以提供的任何可能的字段工作。当一个请求进入spring时,它将把它

我似乎找不到很多关于这个的信息。我已经读到,
PUT
请求应该用于用更新的资源替换整个资源,而
PATCH
请求应该仅用于更新您想要更改的字段。但假设我有一个非常大的对象,其中有很多嵌套的字段和对象,我只想更新其中一个嵌套对象中的特定字段,而不必重新提交整个对象(因为它太大了)。我必须创建一个
补丁
端点。我将如何在SpringRESTAPI中验证这样一个端点?我无法理解端点如何知道它接收到了哪些字段或嵌套字段,以及如何验证它们,并让它为我可以提供的任何可能的字段工作。

当一个请求进入spring时,它将把它转换为一个对象

 @PatchMapping("/customer/1")
 public void updateCustomer(@RequestBody CustomerPatch updateRequest) {
 }
这里,我们将客户补丁请求转换为
CustomerPatch
对象

这样,我们就可以像验证任何其他对象一样验证该对象

我个人使用
@Valid
注释和hibernate验证器

所以我的spring控制器看起来像

@PatchMapping("/customer/1")
public void updateCustomer(@RequestBody @Valid CustomerPatch updateRequest) {
}

public class CustomerPatch{
    @NotNull
    String cusotmerName;
}

您必须自己编写验证,这不是spring为您做的事情,但假设我的补丁请求是更新Customer对象中包含的对象中的嵌套字段。类似customer.nestedObject.nestedField1的内容。在这种情况下,当它被映射到CustomerPatch对象时,只有nestedField1有一个值,其他所有内容都可能为null。那么,我如何知道其他所有内容都是空的,因为它在补丁请求中没有提供值,而不是故意设置为空?