使用不同的验证策略创建和更新请求的单一模型



我有一个UserDTO。对于创建和更新请求都是一样的,但问题是,对于不同的创建和更新请求,必填字段是不同的。假设对于创建请求townname,区域和国家是强制性的,但对于更新请求区域和国家是强制性的。如果我在任何字段上应用@NotNull,它将适用于两种请求类型。我该如何处理这种场景?

public class UserDTO {
private String id;
private String townName;
private String area;
private String country;
}

验证组就是这个问题的解决方案。这个链接帮了我。

创建验证分组的Create和update接口

import javax.validation.groups.Default;
public interface ValidationGroups {
interface Create extends Default {
}
interface Update extends Default {
}
}

在控制器类中进行如下所示的更改。在类的顶部添加@Validated,并在各自的更新和创建方法中添加@Validated(update .class)和@Validated(create .class)。

@RequestMapping(BASE_PATH)
@Validated
public class UserController {
@PutMapping
public Mono<ResponseEntity<UserDTO>> update(@PathVariable String id, @RequestBody @Validated(Update.class) UserDTO userDTO) {}

@PostMapping
public Mono<ResponseEntity<UserDTO>> create(@RequestBody @Validated(create.class) UserDTO userDTO) {}
}

现在在各自的字段上应用验证组。对于两个通用的强制变量,不要在它们上面放任何组,或者同时放两个。

public class UserDTO {
@NotNull(groups = Update.class)
private String id;
@NotNull(groups = Create.class)
private String townName;
// Either put both @NotNull(groups = {Create.class,Update.class}) or leave blank
private String area;
private String country;
}

我们使用不同的模型来处理相同的情况。例如一个用于创建,一个用于更新。如果一个字段有多个通用验证,我们将其设置在基类

最新更新