如何使用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。那么,我如何知道其他所有内容都是空的,因为它在补丁请求中没有提供值,而不是故意设置为空?