我有以下问题:
我想测试一个用户是否成功注册。我不是通过用户界面而是通过 Postman 。问题是当我使用post命令时出现了一个异常。我已经检查了所有注解。
Postman 截图
例外情况:
java.lang.illegalargumentexception:org.springframework.security.crypto.bcrypt.bcryptpasswordencoder.encode(bcryptpasswordencoder)中的rawpassword不能为空。java:103)~[spring-security-core-5.3.3.发布。jar:5.3.3.release]在com.example.application.backend.data.service.userservice.singupuser(userservice。java:41)~[classes/:na]在com.example.application.backend.data.registration.registrationservice.register(注册服务)。java:22)~[classes/:na]位于com.example.application.backend.data.registration.registrationcontroller.register(registrationcontroller)。java:18)
这是我的userservice类:
private final static String USER_NOT_FOUND_MSG = "user with email %s not found";
@Autowired
private final UserRepository userRepository;
@Autowired
private final BCryptPasswordEncoder bCryptPasswordEncoder;
public UserService(
UserRepository userRepository,
BCryptPasswordEncoder bCryptPasswordEncoder) {
this.userRepository = userRepository;
this.bCryptPasswordEncoder = bCryptPasswordEncoder;
}
@Override
public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException {
return userRepository.findByEmail(email)
.orElseThrow(() ->
new UsernameNotFoundException(String.format(USER_NOT_FOUND_MSG, email)));
}
public String singUpUser(User user) {
boolean userExists = userRepository.findByEmail(user.getEmail()).isPresent();
if(userExists){
throw new IllegalStateException("email already taken");
}
String encodedPassword = bCryptPasswordEncoder.encode(user.getPassword());
user.setPassword(encodedPassword);
userRepository.save(user);
return "it works";
}
注册服务类别:
@Autowired
private final UserService userService;
private final EmailValidator emailValidator;
public String register(RegistrationRequest request) {
boolean isValidEmail = emailValidator.test(request.getEmail());
if (!isValidEmail) {
throw new IllegalStateException("email not valid");
}
return userService.singUpUser(
new User(
request.getFirstName(),
request.getLastName(),
request.getEmail(),
request.getPassword(),
UserRole.USER
)
);
}
public RegistrationService(UserService userService, EmailValidator emailValidator) {
this.userService = userService;
this.emailValidator = emailValidator;
}
注册控制器类:
@Autowired
private RegistrationService registrationService;
@PostMapping
public String register(@RequestBody RegistrationRequest request) {
return registrationService.register(request);
}
2条答案
按热度按时间n7taea2i1#
当提供给bcryptencoder的密码字符串为空或null时,会发生此错误。
在userservice.java类中,
user.getpassword()为null,这意味着在registrationservice.java类中,
正在获取空值。
请检查您是否从请求对象获取了密码的正确参数名。如果可能,在代码中添加一些logger语句并进行调试。
github公关
jaxagkaj2#
它正在工作。问题是@column注解被设置为nullable false。