【发布时间】:2023-03-31 22:20:03
【问题描述】:
我会给你看一些代码,然后我会问一个问题。
AccountValidator.java
package com.goode.validator;
import com.goode.business.Account;
import org.springframework.stereotype.Component;
import org.springframework.validation.Errors;
import org.springframework.validation.Validator;
@Component
public class AccountValidator implements Validator {
@Override
public boolean supports(Class clazz) {
return Account.class.equals(clazz);
}
@Override
public void validate(Object target, Errors errors) {
Account account = (Account) target;
if(account.getUsername() == null || account.getUsername().isEmpty()) {
errors.rejectValue("username", "empty username");
}
}
public void validateId(Object target, Errors errors) {
Account account = (Account) target;
if(account.getId() == 1) {
errors.rejectValue("id", "bad ID");
}
}
}
AccountController.java
@RestController
@RequestMapping("/account")
public class AccountController extends BaseController<Account, AccountService> {
@Autowired
private AccountService accountService;
@Autowired
private AccountValidator accountValidator;
@InitBinder
protected void initBinder(final WebDataBinder binder)
{
binder.addValidators(accountValidator);
}
@PostMapping("/register")
public ResponseEntity<?> register(HttpServletRequest request, @Validated(Account.ValidationStepOne.class) @RequestBody Account account, BindingResult result) {
super.initializeService(accountService);
//accountValidator.validateId(account, result);
if(result.hasErrors()){
return ErrorMessage.send(result.getFieldError().getCode(), HttpStatus.BAD_REQUEST);
}
return new ResponseEntity<>(null, HttpStatus.OK);
}
在 Account.java 我有一些验证器,例如@NotNull -> @Validate 检查我的字段 -> 完美。 但是现在我想添加一些自定义验证器,所以我创建了 AccountValidator 并将一些验证放入 validate 方法并创建了 @InitBinder -> if username为空或 null 此 result 将显示错误 -> 效果很好。 但我创建了另一个验证方法 - validateId。如果我取消注释这一行:
accountValidator.validateId(account, result);
validator 可以正常工作,结果会显示错误,但是否可以使用 @InitBinder 来避免使用 validateId 方法?我想像验证方法一样自动调用 validateId。有可能吗?
程序员节快乐。
【问题讨论】:
标签: java spring validation