所以我try 在UserCreateRequest
类中验证email
和name
,但@Wired
不起作用,userRepository
为空
UserCreateRequest.java:
@Getter
@Setter
@Component
public class UserCreateRequest {
private UserRepository userRepository;
public UserCreateRequest() {
}
@Autowired
public UserCreateRequest(UserRepository userRepository) {
this.userRepository = userRepository;
}
@NotBlank(message = "Name is mandatory")
@Size(min = 2, max = 20, message = "Name should be between 2 and 20 characters")
private String name;
@NotBlank(message = "Email is mandatory")
@Email(message = "Email should be valid")
private String email;
@NotNull(message = "Date of birth is mandatory")
@DateFormatRule(message = "Date of birth should be in yyyy-MM-dd format")
private String dob;
public User validated() {
if (userRepository.findUserByEmail(email).isPresent()) {
throw new RuntimeException("Email already exists");
}
if (userRepository.findUserByName(name).isPresent()) {
throw new RuntimeException("Name already exists");
}
User user = new User();
user.setName(name);
user.setEmail(email);
user.setDob(LocalDate.parse(dob));
return user;
}
}
UserController.java:
@PostMapping
public ResponseEntity<User> addUser(@Valid @RequestBody UserCreateRequest userCreateRequest) {
User validatedData = userCreateRequest.validated();
User createdUser = this.userService.addUser(validatedData);
return ResponseEntity.ok(createdUser);
}
发送请求时出现错误:
(ThreadPoolExecutor.java:659)\n\tat org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)\n\tat java.base/java.lang.Thread.run(Thread.java:1623)\n",
"message": "Cannot invoke \"com.test.restapi.repository.UserRepository.findUserByEmail(String)\" because \"this.userRepository\" is null",
"path": "/api/students"
我想判断数据库是否已经存在来自请求类的用户name
或email
,而不是从控制器判断.
有没有办法像那样在UserCreateRequest
班用userRepository
?
我找不到我正在寻找的确切解决方案