使用不同验证策略创建和更新请求的单一模型
Single Model for create and update request with different validation strategy
我有一个 UserDTO。创建和更新请求都是一样的,但问题是必填字段对于不同的创建和更新请求是不同的。假设对于创建请求,城镇名称、地区和国家是强制性的,但对于更新请求,地区和国家是强制性的。如果我在任何字段上应用@NotNull,它将适用于两种请求类型。我该如何处理这种情况?
public class UserDTO {
private String id;
private String townName;
private String area;
private String country;
}
我们正在使用不同的模型解决相同的情况。例如,一个用于创建,一个用于更新。如果一个字段有很多常见的验证,我们将其设置为 Base class
验证组是解决这个问题的方法。这 link 帮助了我。
为验证分组的创建和更新创建一个接口。
import javax.validation.groups.Default;
public interface ValidationGroups {
interface Create extends Default {
}
interface Update extends Default {
}
}
在您的控制器中进行更改 class,如下所示。在相应的更新和创建方法中的 class 和 @Validated(Update.class) 和 @Validated(Create.class) 顶部添加 @Validated。
@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;
}
我有一个 UserDTO。创建和更新请求都是一样的,但问题是必填字段对于不同的创建和更新请求是不同的。假设对于创建请求,城镇名称、地区和国家是强制性的,但对于更新请求,地区和国家是强制性的。如果我在任何字段上应用@NotNull,它将适用于两种请求类型。我该如何处理这种情况?
public class UserDTO {
private String id;
private String townName;
private String area;
private String country;
}
我们正在使用不同的模型解决相同的情况。例如,一个用于创建,一个用于更新。如果一个字段有很多常见的验证,我们将其设置为 Base class
验证组是解决这个问题的方法。这 link 帮助了我。
为验证分组的创建和更新创建一个接口。
import javax.validation.groups.Default;
public interface ValidationGroups {
interface Create extends Default {
}
interface Update extends Default {
}
}
在您的控制器中进行更改 class,如下所示。在相应的更新和创建方法中的 class 和 @Validated(Update.class) 和 @Validated(Create.class) 顶部添加 @Validated。
@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;
}