弹簧引导休息控制器。返回对象,包括继承属性和异常处理

我在 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 块处理的(从上到下)。


编辑:我已经解决了第二个问题。我没有注意到抛出异常的条件是抛出空指针异常。所以现在说得通了。我添加了空检查,异常现在工作正常。但我仍然不知道如何返回整个响应,包括来自父响应对象的消息。


PIPIONE
浏览 155回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java