gpt4 book ai didi

java - 验证可选字段

转载 作者:行者123 更新时间:2023-12-01 20:08:50 24 4
gpt4 key购买 nike

我有一个以下请求 json

{
"ParameterA":"value",
"ParameterB":[
{
"key":"",
"value":""
},
{
"key":"",
"value":""
}
]
}

我正在尝试验证这个 json ,我的要求是,如果 ParameterB 存在,那么内部肯定存在一个列表,否则 ParameterB 是可选的。例如,如果 ParameterB 本身不存在,那么不会有问题.

我正在寻找同样的java验证注释。我在键和值上使用了@NotNull,但无法决定在 ParameterB 上使用什么,因为它是列表中存在的数组

由于它也具有数据库连接,因此我正在使用 JPA 并进行此 REST 调用。

我在 ParameterB 上尝试了 @NotEmpty 但这没有帮助。我想要一个注释,这样如果 ParameterB 本身不存在,它就不会影响实际流程。以下案例

{
"ParameterA":"value"
}

任何建议或帮助将不胜感激。

最佳答案

您正在寻找的验证是非标准的。我不知道现有的注释是否实现了这种验证。

幸运的是,javax.validation 约束可以通过自定义验证规则轻松扩展:

a) 创建约束注释

import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
import static java.lang.annotation.ElementType.FIELD;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import javax.validation.Constraint;
import javax.validation.Payload;

@Target({METHOD, FIELD, ANNOTATION_TYPE})
@Retention(RUNTIME)
@Constraint(validatedBy = NullOrNotEmptyValidator.class)
@Documented
public @interface NullOrNotEmpty {

String message() default "{com.mycompany.constraints.nullornotempty}";

Class<?>[] groups() default {};

Class<? extends Payload>[] payload() default {};

}

b) 实现 validator

import java.lang.reflect.Array;
import java.util.Map;

import javax.validation.ConstraintValidator;
import javax.validation.ConstraintValidatorContext;

public class NullOrNotEmptyValidator implements ConstraintValidator<NullOrNotEmpty, Object> {

@Override
public void initialize(NullOrNotEmpty constraintAnnotation) {
}

@Override
public boolean isValid(Object object, ConstraintValidatorContext constraintContext) {

if (object == null) {
return true;
}

final Class<?> fieldClass = object.getClass();
if (fieldClass.isArray()) {
return Array.getLength(object) > 0;
}

if (Iterable.class.isAssignableFrom(fieldClass)) {
return ((Iterable) object).iterator().hasNext();
}

if (Map.class.isAssignableFrom(fieldClass)) {
return !((Map) object).isEmpty();
}

return false;
}

}

c) 定义默认错误消息

This step depends on validation engine you are using

包含 Hibernate Validator 示例的文章:Chapter 3. Creating custom constraints

关于java - 验证可选字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47020795/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com