【发布时间】:2019-05-22 20:44:57
【问题描述】:
我创建了一个自定义验证器来验证传递给转换器中函数的字符串。但是,没有调用自定义验证器。我错过了什么吗?
OperationParameter.java
@Documented
@Constraint(validatedBy = OperationParameterValidation.class)
@Target( { ElementType.PARAMETER
})
@Retention(RetentionPolicy.RUNTIME)
public @interface OperationParameter {
String message() default "Operation Parameter Invalid";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}
OperationParameterValidation.java
public class OperationParameterValidation implements ConstraintValidator<OperationParameter, String> {
@Override
public boolean isValid(String value, ConstraintValidatorContext context) {
System.out.println("Validator called");
// validation process
// return true / false;
}
}
converter.java
@Component
public class StringToOperation implements Converter<String, Operation> {
@Override
public Operation convert(@Valid @OperationParameter String source) {
// Even I pass wrong String this function is executed successfully, and no print from validator
}
}
Service.java
public class Service {
@Autowired
ConversionService conversionService;
public void action() {
String action = "";
Operation addInsertOperation = conversionService.convert(action, Operation.class);
}
}
【问题讨论】:
-
您是否可以将
StringToOperation标记为@Component?然后将进行 Spring 的验证 -
我试过了,但仍然没有调用验证。
-
你也可以用你创建/注入
StringToOperation转换器的部分显示ConversionService类吗? -
org.springframework.core.convert.ConversionService 是自动装配的,它会根据参数自动调用。
-
我认为
ConversionService和StringToOperation不是一回事。论据也不合适。我假设您使用@Autowired将StringToOperation注入ConversionService。但是你能把这段代码放在这里吗?只是为了交叉检查
标签: java spring-boot customvalidator