【发布时间】:2021-03-18 19:02:23
【问题描述】:
我正在尝试验证字符串 email 以检查它是否已出现在我的 MYSQL 数据库中,当我使用已使用的电子邮件执行时,我收到以下错误:
java.lang.IllegalStateException:Validator [co2103.hw2.controller.TestResultsValidator@62b41c6] 的目标无效:org.springframework.validation.BeanPropertyBindingResult:1 个错误 字段“电子邮件”上的对象“testResults”中的字段错误:拒绝值 [abc@le.ac.uk];代码 [email.testResults.email,email.email,email.java.lang.String,email];论据 [];默认消息 [已由其他用户提供!请使用另一个!]
这是验证器代码
public class TestResultsValidator implements Validator{
private TestResultsRepository TrRepo;
private HomeTestRepository HTRepo;
public TestResultsValidator (TestResultsRepository TrRepo, HomeTestRepository HTRepo) {
this.TrRepo = TrRepo;
this.HTRepo = HTRepo;
}
@Override
public boolean supports(Class<?> clazz) {
return TestResults.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
TestResults tr = (TestResults) target;
for(TestResults t : TrRepo.findAll()) {
//SAME EMAIL
if (tr.getEmail().equals(t.getEmail())) {
errors.rejectValue("email", "email", "is already provided by a different user! Please user another one!");
System.out.println("Email is already taken by a different user, please try another username");
break;
}
控制器代码
//Add new results
@RequestMapping(value = "/addResults",method = {RequestMethod.POST , RequestMethod.GET})
public String newHotel(@Valid @ModelAttribute TestResults results, BindingResult result, Model model) {
if (result.hasErrors()) {
model.addAttribute("errors", result);
return "start";
}
else {
trRepo.save(results);
return "Submitted";
}}
【问题讨论】:
标签: java spring validation jsp