Cannot invoke "org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)"的中文翻译为:无法调用"org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)"。
Cannot invoke "org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)"的中文翻译为:无法调用"org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)"。
我正在尝试使用Spring创建登录和注册表单。我对Spring还不熟悉。\n我遇到了以下错误:\n
无法调用"org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)",因为"net.cdac.TMS.service.UserServiceImpl.passwordEncoder"为空 java.lang.NullPointerException: 无法调用"org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)",因为"net.cdac.TMS.service.UserServiceImpl.passwordEncoder"为空 at net.cdac.TMS.service.UserServiceImpl.save(UserServiceImpl.java:36) at net.cdac.TMS.web.UserRegistrationController.registerUserAccount(UserRegistrationController.java:36) ...
\n我的User.java代码如下:\n
... @Entity @Table(name = "user", uniqueConstraints = @UniqueConstraint(columnNames = "uemailid")) public class User { ... }
\nUserServiceImpl.java代码如下:\n
... @Service public class UserServiceImpl implements UserService{ ... @Autowired private static BCryptPasswordEncoder passwordEncoder; ... }
\nUserRegistrationDto.java代码如下:\n
... public class UserRegistrationDto { ... }
\nUserRegistrationController.java代码如下:\n
... @Controller @RequestMapping("/registration") public class UserRegistrationController { ... }
\nRole.java代码如下:\n
... @Entity @Table(name = "role") public class Role { ... }
\n我不明白导致这个错误的原因以及如何解决它。非常感谢您的帮助。
在这段代码中,问题出现在调用`BCryptPasswordEncoder.encode(java.lang.CharSequence)`方法时出现了`Cannot invoke "org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder.encode(java.lang.CharSequence)"`的错误。这个错误的原因是在调用`encode`方法时,没有实例化`BCryptPasswordEncoder`对象。
解决这个问题的方法是将`private static BCryptPasswordEncoder passwordEncoder;`修改为`private BCryptPasswordEncoder passwordEncoder;`,即去掉`static`关键字。这样就可以在后续的代码中实例化`BCryptPasswordEncoder`对象,并成功调用`encode`方法。
下面是修改后的代码:
private BCryptPasswordEncoder passwordEncoder;
感谢上述修改,问题已经解决了。