java - Spring验证器类不验证Dto数据
问题描述
我正在实现一个微服务,它只需要验证来自请求正文的事务 ,如果它有效,则将其发送到下一个微服务。我已经实现了Validator,但它似乎不起作用
交易 DTO:
public class Transaction {
private TransactionType transactionType;
private String iban;
private String CNP;
private String name;
private String description;
private Float sum;
...
}
验证者:
@Component()
public class TransactionValidation implements Validator {
@Override
public boolean supports(Class<?> aClass) {
return Transaction.class.equals(aClass);
}
@Override
public void validate(Object object, Errors errors) {
Transaction transaction = (Transaction) object;
if(!isValidCnp(transaction.getCNP())){
errors.rejectValue("CNP", "CNP validation error");
}
if(!isValidIban(transaction.getIban())){
errors.rejectValue("IBAN", "IBAN validation error");
}
if(isInputStringEmpty(transaction.getName())){
errors.rejectValue("name", "Name validation error");
}
}
...
}
Controller 什么都不做,只是简单地返回它接收到的事务:
@PostMapping()
public Transaction validateTransaction(@RequestBody @Valid Transaction transaction){
return transaction;
}
但这似乎不起作用,似乎该应用程序没有使用上面实现的Validator。为什么?我必须在任何地方注册我的验证器吗?
解决方案
我相信 @Valid 注释适用于 JSR-303 验证规范,并在您的 DTO 中使用注释。你有2个选择
public class Transaction {
@NonNull
@NotEmpty
@NumericIbanConstriant
private String iban;
}
@Constraint(validatedBy = NumericIbanConstriantValidator.class)
public @interface NumericIbanConstriant {
}
public NumericIbanConstriantValidator implements ConstraintValidator<NumericIbanConstraint, String> {
// validation logic for iban string being numeric perhaps?
}
或在您的控制器中直接自动装配 TransactionValidation 并调用“验证”传入 Transaction 和 Errors 对象
@PostMapping()
public Transaction validateTransaction(@RequestBody Transaction transaction, Errors errors){
transactionValidation.validate(transaction, errors);
return transaction;
}
推荐阅读
- javascript - 点击功能的jQuery加载只工作一次
- c++ - 函数 CGLGetCurrentContext 什么时候应该返回 NULL,什么时候不应该?
- python - tensorflow 多标签分类 - 不兼容的形状:[7,5] vs. [7]
- javascript - 重新计算更改时选择选项的总和
- asp.net - 无论项目位于何处,都从项目文件夹中删除文件
- python - 在张量流中沿任何轴进行归一化意味着什么?
- linux - 捕获用户信号并继续执行
- android - 最后一项左对齐
- c++ - CMake /w Ninja 生成构建文件但没有可执行文件
- odoo - Odoo Qweb 报告标题重叠正文