如何通过组合 2 个字段来使用 @NotEmpty?
How to use @NotEmpty by combining 2 fields?
我有以下要求。
@Data
public class ProductRequest {
@NotEmpty
private String code;
@NotEmpty
private String name;
}
我将此请求用于 2 种不同的方法,它们都只使用一个字段,不需要另一个字段。假设 methodA 在这个请求中使用 code
和 methodB 使用 name
字段(不需要其他字段)。因此,在这种情况下,我认为一种解决方案是对两种方法使用相同的请求,而不是创建 2 个单独的请求。那么,有什么可以使字段之一不为空吗?我也不确定它是否解决了我的问题,因为在这个场景中请求将不知道哪个 属性 不应该为空。有解决此问题的想法吗?
你可以用custom validator(spring,代码验证,没有javax。)
与javax.validation:
- Groups 听起来非常适合您的场景。
- 当然也可以用 Custom Constraint 实现。 (类似于 1.)
缺点:你必须处理你的“验证结构”(@Valid
vs @validated
/如何通过group
)
...
您可以对约束进行分组,这样您就可以知道在每种情况下要验证哪些属性。第一步是将属性 groups
添加到 javax 验证注释中。为此,您需要创建一些标记接口,一个用于您的每个用例:
public interface MethodA { } // You should name this properly, it is just for demonstration purposes
public interface MethodB { }
然后你需要在你的注解中配置groups
属性:
@Data
public class ProductRequest {
@NotEmpty(groups = MethodA.class)
private String code;
@NotEmpty(groups = MethodB.class)
private String name;
}
最后一步是使用 @Validated
而不是 @Valid
来触发数据验证。大致如下:
@RequestMapping(value = "/methodA", method = RequestMethod.POST)
public String methodA(@Validated(MethodA.class) @RequestBody ProductRequest productRequest) {
(...)
}
@RequestMapping(value = "/methodB", method = RequestMethod.POST)
public String methodB(@Validated(MethodB.class) @RequestBody ProductRequest productRequest) {
(...)
}
您可以在以下在线资源中阅读更多相关信息:
我有以下要求。
@Data
public class ProductRequest {
@NotEmpty
private String code;
@NotEmpty
private String name;
}
我将此请求用于 2 种不同的方法,它们都只使用一个字段,不需要另一个字段。假设 methodA 在这个请求中使用 code
和 methodB 使用 name
字段(不需要其他字段)。因此,在这种情况下,我认为一种解决方案是对两种方法使用相同的请求,而不是创建 2 个单独的请求。那么,有什么可以使字段之一不为空吗?我也不确定它是否解决了我的问题,因为在这个场景中请求将不知道哪个 属性 不应该为空。有解决此问题的想法吗?
你可以用custom validator(spring,代码验证,没有javax。)
与javax.validation:
- Groups 听起来非常适合您的场景。
- 当然也可以用 Custom Constraint 实现。 (类似于 1.)
缺点:你必须处理你的“验证结构”(
@Valid
vs@validated
/如何通过group
)...
您可以对约束进行分组,这样您就可以知道在每种情况下要验证哪些属性。第一步是将属性 groups
添加到 javax 验证注释中。为此,您需要创建一些标记接口,一个用于您的每个用例:
public interface MethodA { } // You should name this properly, it is just for demonstration purposes
public interface MethodB { }
然后你需要在你的注解中配置groups
属性:
@Data
public class ProductRequest {
@NotEmpty(groups = MethodA.class)
private String code;
@NotEmpty(groups = MethodB.class)
private String name;
}
最后一步是使用 @Validated
而不是 @Valid
来触发数据验证。大致如下:
@RequestMapping(value = "/methodA", method = RequestMethod.POST)
public String methodA(@Validated(MethodA.class) @RequestBody ProductRequest productRequest) {
(...)
}
@RequestMapping(value = "/methodB", method = RequestMethod.POST)
public String methodB(@Validated(MethodB.class) @RequestBody ProductRequest productRequest) {
(...)
}
您可以在以下在线资源中阅读更多相关信息: