gpt4 book ai didi

java - JSR-303 自定义 validator 中未 Autowiring 依赖项

转载 作者:IT老高 更新时间:2023-10-28 13:57:55 25 4
gpt4 key购买 nike

我有一个包含 User 类的 Spring Boot 应用程序 - 所有字段都有标准 JSR-303 注释(@NotNull、@Size 等)并且验证工作正常。

但是,当我向用户添加自定义验证时,我无法将依赖项注入(inject)自定义 validator :

@Component
public class UniqueUsernameValidator implements
ConstraintValidator<UniqueUsername, String> {

@Autowired
private UserRepository userRepository;

@Override
public boolean isValid(String username, ConstraintValidatorContext context) {
// implements logic
}

@UniqueUsername 注解声明为:

@Documented
@Retention(RUNTIME)
@Target({FIELD, ANNOTATION_TYPE, PARAMETER})
@Constraint(validatedBy = UniqueUsernameValidator.class)
@interface UniqueUsername {
String message() default "{com.domain.user.nonUniqueUsername}";
Class<?>[] groups() default { };
Class<? extends Payload>[] payload() default { };
}

注释字段:

@NotBlank
@Size(min = 2, max = 30)
@UniqueUsername
private String username;

以及 validator 的用法:

@Service
public final class UserService {

private final UserRepository userRepository;
private final Validator validator;

public UserService(UserRepository userRepository, Validator validator)
{
this.userRepository = userRepository;
this.validator = validator;
}

public void createUser(User user) {
Set<ConstraintViolation<User>> validate = validator.validate(user);
// logic...
}
}

问题是 UserRepository 没有在 UniqueUsernameValidator 中 Autowiring 。字段始终为空。

我正在使用 LocalValidatorFactoryBean。

有人知道为什么 Autowiring 不起作用吗?


@Controller
public class UserController {

private final UserService userService;

public UserController(UserService userService) {
this.userService = userService;
}

@PostMapping("/user/new")
public String createUser(@ModelAttribute("newUser") User newUser, BindingResult bindingResult,
Model model) {
userService.createUser(newUser);
// omitted
}

最佳答案

需要在User前面的public String createUser(@ModelAttribute("newUser") User newUser)实体类前面加上@Valid注解。

@RequestBody @Valid User user

关于java - JSR-303 自定义 validator 中未 Autowiring 依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52066965/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com