java - 无法调用 findByEmail 因为 "this.userRepository"是空错误

标签 java spring-boot api axios registration

每次我尝试处理我的/register 方法时,我都会收到 Cannot invoke "com.***.repositories.UserRepository.findByEmail(String)"因为 "this.userRepository"is null 错误。

我不明白为什么代码显示为空。

Controller -

@Controller
@RestController
@RequestMapping("/api/v1")
@CrossOrigin(origins = "*", allowedHeaders = "*")
public class AuthenticationController {

    @Autowired
    UserService userService;
    UserRepository userRepository;
    AuthenticationTokenRepository authenticationTokenRepository;

    @PostMapping(value = "/register")
    public ModelAndView registerUser(ModelAndView modelAndView, User user) {
        User existingUser = userRepository.findByEmail(user.getEmail());
        if (existingUser != null) {
            modelAndView.addObject("message", "This email already exists!");
            modelAndView.setViewName("error");
        } else {
            userRepository.save(user);

            AuthenticationToken authenticationToken = new AuthenticationToken(user);
            authenticationTokenRepository.save(authenticationToken);

            SimpleMailMessage mailMessage = new SimpleMailMessage();
            mailMessage.setTo(user.getEmail());
            mailMessage.setSubject("Complete Registration!");
            mailMessage.setFrom("***@gmail.com");
            mailMessage.setText("To confirm your account, please click here : "
                    + "http://localhost:8080/confirm-account?token=" + authenticationToken.getConfirmationToken());

            emailSenderService.sendEmail(mailMessage);
            modelAndView.addObject("email", user.getEmail());
            modelAndView.setViewName("successfulRegisteration");
        }
        return modelAndView;
    }

}

Axios 调用 -

submit() {
  let formData = new FormData();
  formData.set("firstName" , this.firstName)
  formData.set("lastName", this.lastName)
  formData.set("email", this.email)
  formData.set("password", this.password)
  formData.set("captchaToken", this.captchaToken)
  formData.set("agreedToTermsOfService", true)
  axios.post("http://localhost:8080/api/v1/register", formData,
      {headers: {'Content-Type': 'application/json'}})
      .then(res =>  {
        if (res.status === 200) {
          this.$router.push('/register-complete');
        } else {
          console.log(res.data.code);
        }
      })
      .catch(function (err) {
        console.log(err);
      })
}

我的用户资料库-

@Repository
public interface UserRepository extends JpaRepository<User, Long> {
    User findByEmail(String email);
}

最佳答案

只需将@Autowired 添加到您希望在 spring 之前 Autowiring 的相关字段。

更改您的代码

   @Autowired
    UserService userService;
    UserRepository userRepository;
    AuthenticationTokenRepository authenticationTokenRepository;

   @Autowired
    UserService userService;

   @Autowired
    UserRepository userRepository;

   @Autowired
    AuthenticationTokenRepository authenticationTokenRepository;

关于java - 无法调用 findByEmail 因为 "this.userRepository"是空错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66755214/

相关文章:

java - Mockito 测试自动连线字段

java - 如何在一次迭代中到达单向链表的中间?

java - 从Main迁移到Gradle时未发现主类错误

java - 在 Spring Boot 客户端中接收 Flux

javascript - API 开发、Bootstrap 和 jQuery。将它们全部注入(inject)用户代码中是个好主意吗?

node.js - 如何自动化 Google Drive Docs OCR 功能?

javascript - 异步等待和常规获取有什么区别?

java - Apache Spark 与 elasticsearch V5.X

java - 如何施加 Google App Engine 的 DeadlineExceededException?

java - 由于缺少 EmbeddedServletContainerFactory bean,Spring Boot 无法启动 EmbeddedWebApplicationContext