java - 无法调用 findByEmail,因为“this.userRepository”为空错误
问题描述
我一直收到无法调用“com.***.repositories.UserRepository.findByEmail(String)”,因为每次尝试处理我的 /register 方法时“this.userRepository”都是空错误。
我无法弄清楚为什么代码会显示为空。
控制器 -
@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 添加到您希望在春季获得 Autowired 的相关字段中。
更改您的代码
@Autowired
UserService userService;
UserRepository userRepository;
AuthenticationTokenRepository authenticationTokenRepository;
至
@Autowired
UserService userService;
@Autowired
UserRepository userRepository;
@Autowired
AuthenticationTokenRepository authenticationTokenRepository;
推荐阅读
- c# - 如何向新添加的连接器添加标签以及如何获取 beginItem 标签和 EndItem 标签?
- python - 在 /admin/login/ 出现 OperationalError 错误没有这样的表:auth_user
- c# - 在 ASP.NET Core 中正确实现 NRT
- google-apps-script - 更改发件人姓名从电子表格创建日历邀请
- assembly - 如何在装配中进行十六进制偏移计算
- c++ - 为什么添加两个值在运行时会有如此高的可变性?
- c++ - 树的节点之间的最大距离中的运行时错误
- python - 类似于 R 的 bpa(基本模式分析)的 Python 包 - 包
- javascript - 如何获取表字段的 SUM?- Angularjs 和 Sqlite
- python-3.x - len和size的区别