почему метод user.get () выдает ошибку? а idk как гуглить - PullRequest
0 голосов
/ 18 октября 2019

USER.GET () выдает ошибку и IDK, как и почему, и как Google. Есть кто-нибудь, кто знает, как решить эту ошибку?

спасибо за вашу заботу !!

@GetMapping("/users/{id}")
public EntityModel<User> retrieveUser(@PathVariable int id) {
    User user = service.findOne(id);
    if(user == null) {

        throw new UserNotFoundException("id-" + id);

    }


   //FOLLOWING LINE GIVES ERROR
    EntityModel<User> model = new EntityModel<>(user.get());
    WebMvcLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers());
    model.add(linkTo.withRel("all-users"));

}

1 Ответ

0 голосов
/ 18 октября 2019

Вы проверяете, является ли ваш возвращаемый Optional нулевым, но этого недостаточно, так как Optional переносит либо null, либо ваш объект. Поэтому вам нужно проверить, действительно ли ваш Optional содержит объект пользователя. В вашем случае корректировка кода следующим образом должна работать, проверяя, является ли Optional пустым, а не null.

@GetMapping("/users/{id}")
public EntityModel<User> retrieveUser(@PathVariable int id) {
    User user = service.findOne(id);
    if(user.isEmpty()) {

        throw new UserNotFoundException("id-" + id);

    }


   //FOLLOWING LINE GIVES ERROR
    EntityModel<User> model = new EntityModel<>(user.get());
    WebMvcLinkBuilder linkTo = linkTo(methodOn(this.getClass()).retrieveAllUsers());
    model.add(linkTo.withRel("all-users"));

}

Хорошее руководство по Optionals в Java: https://www.baeldung.com/java-optional

...