我刚刚开始请求正文的字段验证,并实现了所有基本的带注释的验证。我有一个依赖于其他字段的字段验证。
此类正在用作请求正文。
验证条件:
如果 value1.equals('OK')
则 value2
应匹配特定的正则表达式模式,如果与正则表达式模式不匹配,则引发验证错误,表示 value2
与正则表达式模式不匹配。
我尝试创建自定义注释,但我不知道如何操作以及如何使用它
Public class test
{
String value1;
String value2;
}
我希望针对该特定情况实现条件验证
最佳答案
有几种方法可以验证请求正文,或者换句话说,实现服务器端验证。其中一些可以是
- 使用基本注释
- 为自定义验证创建自定义注释
- 为自定义验证创建自定义 validator
我最喜欢的是选项 3。因此我将在下面给出选项 3 的解决方案。步骤是
创建自定义 validator
import org.springframework.stereotype.Component; import org.springframework.validation.Errors; import org.springframework.validation.ValidationUtils; import org.springframework.validation.Validator; @Component public class MessageValidator implements Validator { @Override public boolean supports(Class<?> clazz) { return Message.class.equals(clazz); } @Override public void validate(Object target, Errors errors) { ValidationUtils.rejectIfEmpty(errors, "value1", "value1 is empty"); ValidationUtils.rejectIfEmpty(errors, "value2", "value2 is empty"); Message m = (Message) target; if (m.getValue1().trim().equalsIgnoreCase("OK") && m.getValue2().matches(SOME_REGEX_PATTERN)) { errors.rejectValue("value2", "My custom validator is working"); } } }
将您的自定义 validator 绑定(bind)到模型的 Controller 中
public class MainSiteController { @Autowired private MessageValidator messageValidator; @InitBinder("message") protected void initMessageBinder(WebDataBinder binder) { binder.addValidators(messageValidator); } }
定义模型有效并让 Controller 完成工作
@PostMapping( path = "/saveMessage") public String saveNewMessage(@Validated Message message, BindingResult bindingResult){ if (bindingResult.hasErrors()) { return "message"; } myService.saveNewMessageModel(message); return "messageSaved"; }
关于java - Spring Boot中请求字段的条件验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58686626/