我在 Spring Boot restcontroller 方面遇到了困难。
用户服务
@Service
public class UserService implements IUserService {
@Autowired
public PasswordEncoder passwordEncoder;
private final UserRepository userRepository;
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
public UserLoginResponse register(RegisterUserRequest request) throws NoValidRegisterDataException, Exception {
UserLoginResponse response = new UserLoginResponse();
UserEntity user = request.getUser();
if(!this.checkUserDataValidity(user)) {
throw new NoValidRegisterDataException();
}
user.setPassword(this.encodePassword(user.getPassword()));
try {
user = this.userRepository.save(user);
} catch (Exception e) {
throw new Exception("Database save error");
}
response.addMessage(new ResponseMessage(ResponseMessageType.success, "Uživatel úspěšně registrován"));
response.setUser(user);
//TODO token handler
return response;
}
private boolean checkUserDataValidity(UserEntity user) {
return (user.getEmail() != null && user.getPassword() != null && user.getUsername() != null);
}
private String encodePassword(String password) {
return this.passwordEncoder.encode(password);
}
}
到目前为止,我有一个服务注册(主要方法)。它由 UserController 调用(下面的代码)
@RestController
public class UserController {
private final UserService userService;
public UserController(UserService userService) {
this.userService = userService;
}
第一个问题是,当发生不好的事情(错误的用户数据,其他一些错误)时,我会得到空的 UserLoginResponse 对象。大多数情况下没问题,但我没有消息。(错误消息设置在 UserController 的 catch 块中,因此它们应该在那里。)
第二个问题是,即使我在 UserController 的第一个 catch 块(一般异常)中抛出 NoValidRegisterDataException 异常也由最后一个 catch 块处理。我怎样才能解决这个问题?我认为异常是由它适合的第一个 catch 块处理的(从上到下)。
编辑:我已经解决了第二个问题。我没有注意到抛出异常的条件是抛出空指针异常。所以现在说得通了。我添加了空检查,异常现在工作正常。但我仍然不知道如何返回整个响应,包括来自父响应对象的消息。
相关分类