我只是从请求正文的字段验证开始,并实现了所有基本的带注释的验证。我有一个依赖于其他字段的字段验证。
正在使用此类作为请求正文。
验证条件:
如果value1.equals('OK')
则value2
应该匹配特定的正则表达式模式,如果不匹配正则表达式模式,则引发验证错误,说value2
不匹配正则表达式模式
我试图创建一个自定义注释,但是我不知道该怎么做以及如何使用它
Public class test
{
String value1;
String value2;
}
我希望针对特定情况实施条件验证
答案 0 :(得分:0)
有两种方法可以验证请求正文,即实现服务器端验证。其中一些可以是
我最喜欢的是选项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";
}