我刚刚开始进行请求正文的现场验证,并实现了所有基本的带注释的验证。我有一个依赖于其他字段的字段验证。
正在使用该类作为请求正文。
验证条件:
[如果value1.equals('OK')
则value2
应该匹配特定的正则表达式模式,如果它不匹配正则表达式模式,则引发验证错误,说value2
与正则表达式模式不匹配。
我试图创建一个自定义注释,但我不知道该怎么做以及如何使用它
Public class test
{
String value1;
String value2;
}
我希望针对该特定情况执行条件验证
有几种方法可以验证请求正文,换句话说就是实现服务器端验证。其中一些可以是
我最喜欢的是选项3。因此,我将在下面为选项3提供解决方案。步骤是
创建您的自定义验证器
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");
}
}
}
[在您的控制器中将您的自定义验证器绑定到],模型>
public class MainSiteController
{
@Autowired
private MessageValidator messageValidator;
@InitBinder("message")
protected void initMessageBinder(WebDataBinder binder) {
binder.addValidators(messageValidator);
}
}
将模型定义为有效并让控制器执行任务
@PostMapping( path = "/saveMessage")
public String saveNewMessage(@Validated Message message, BindingResult bindingResult){
if (bindingResult.hasErrors()) {
return "message";
}
myService.saveNewMessageModel(message);
return "messageSaved";
}