Spring 列表的 MVC 验证并报告无效值
Spring MVC Validation for list and reporting the invalid value
我有一个应该具有特定格式的字符串列表。我需要 return 带有未指定格式的字符串的错误消息。如何使用 spring 验证来做到这一点(我正在使用休眠验证器)。
注释:
@Documented
@Retention(RUNTIME)
@Target({FIELD, METHOD})
@Constraint(validatedBy = HostsValidator.class)
public @interface HostsConstraint {
String message();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
实施:
public class HostsValidator implements ConstraintValidator<HostsConstraint, List<String>>{
@Override
public void initialize(OriginHostsConstraint constraintAnnotation) {
}
@Override
public boolean isValid(List<String> strings, ConstraintValidatorContext context) {
for (String s : strings) {
if (!s.matches("[0-9]+") {
//How do I say: Invalid string <s> ?
return false;
}
}
}
}
用法:
public class Test {
@HostsConstraint(message="Invalid string ")
private List<String> hosts;
}
使用 validatedValue
将给出整个列表。
我想我找到了解决方案,但它与 hibernate 验证器相结合。甚至可能是一个 hacky 实现。
用法:
public class Test {
@HostsConstraint(message="Invalid string : ${invalidStr}")
private List<String> hosts;
}
实施
public class HostsValidator implements ConstraintValidator<HostsConstraint, List<String>>{
@Override
public void initialize(OriginHostsConstraint constraintAnnotation) {}
@Override
public boolean isValid(List<String> strings, ConstraintValidatorContext context) {
for (String s : strings) {
if (!s.matches("[0-9]+") {
ConstraintValidatorContextImpl contextImpl =
(ConstraintValidatorContextImpl) context
.unwrap(HibernateConstraintValidatorContext.class);
contextImpl.addExpressionVariable("invalidStr", s);
return false;
}
}
}
}
使用 JSR 380 验证,它允许容器元素约束。
这里是 link 到 Hibernate Validator 6.0.6.FINAL Document
中的容器元素部分
我有一个应该具有特定格式的字符串列表。我需要 return 带有未指定格式的字符串的错误消息。如何使用 spring 验证来做到这一点(我正在使用休眠验证器)。 注释:
@Documented
@Retention(RUNTIME)
@Target({FIELD, METHOD})
@Constraint(validatedBy = HostsValidator.class)
public @interface HostsConstraint {
String message();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
实施:
public class HostsValidator implements ConstraintValidator<HostsConstraint, List<String>>{
@Override
public void initialize(OriginHostsConstraint constraintAnnotation) {
}
@Override
public boolean isValid(List<String> strings, ConstraintValidatorContext context) {
for (String s : strings) {
if (!s.matches("[0-9]+") {
//How do I say: Invalid string <s> ?
return false;
}
}
}
}
用法:
public class Test {
@HostsConstraint(message="Invalid string ")
private List<String> hosts;
}
使用 validatedValue
将给出整个列表。
我想我找到了解决方案,但它与 hibernate 验证器相结合。甚至可能是一个 hacky 实现。
用法:
public class Test {
@HostsConstraint(message="Invalid string : ${invalidStr}")
private List<String> hosts;
}
实施
public class HostsValidator implements ConstraintValidator<HostsConstraint, List<String>>{
@Override
public void initialize(OriginHostsConstraint constraintAnnotation) {}
@Override
public boolean isValid(List<String> strings, ConstraintValidatorContext context) {
for (String s : strings) {
if (!s.matches("[0-9]+") {
ConstraintValidatorContextImpl contextImpl =
(ConstraintValidatorContextImpl) context
.unwrap(HibernateConstraintValidatorContext.class);
contextImpl.addExpressionVariable("invalidStr", s);
return false;
}
}
}
}
使用 JSR 380 验证,它允许容器元素约束。
这里是 link 到 Hibernate Validator 6.0.6.FINAL Document
中的容器元素部分