Весенний ботинок. Как передать Необязательный <> в Entity Class - PullRequest
0 голосов
/ 05 мая 2018

В настоящее время я делаю веб-сайт с использованием Spring, и я наткнулся на этот базовый сценарий, который я не имею ни малейшего представления о том, как решить этот конкретный код: Entity = Необязательно;

RoomEntity roomEntity =  roomRepository.findById(roomId);

ReservationResource (класс запроса API):

    public class ReservationResource {
    @Autowired
    RoomRepository roomRepository;

    @RequestMapping(path = "/{roomId}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public ResponseEntity<RoomEntity> getRoomById(
    @PathVariable
    Long roomId){
        RoomEntity roomEntity =  roomRepository.findById(roomId);
        return new ResponseEntity<>(roomEntity, HttpStatus.OK);}
    }}

RoomRepository Class:

public interface RoomRepository extends CrudRepository<RoomEntity, Long> {
    List<RoomEntity> findAllById(Long id);
}

RoomEntity

@Entity
@Table(name = "Room")
public class RoomEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;

    @NotNull
    private Integer roomNumber;

    @NotNull
    private String price;

    public RoomEntity() {
        super();
    }
}

Ответы [ 4 ]

0 голосов
/ 12 июля 2019

В ответах не хватает работы. Перед тем, как позвонить get(), вам следует проверить с помощью isPresent(). Вот так:

Optional<RoomEntity> optionalEntity =  roomRepository.findById(roomId);
if (optionalEntity.isPresent()) {
    RoomEntity roomEntity = optionalEntity.get();
    ...
}

Прочитайте эту замечательную статью об опциях: https://dzone.com/articles/using-optional-correctly-is-not-optional

0 голосов
/ 05 мая 2018

Первое решение

Вы можете реализовать JpaRepository вместо CrudRepository, который предоставляет метод getOne, который возвращает RoomEntity, как вы ожидаете. (JpaRepository для JPA или MongoRepository для MongoDB):

public interface RoomRepository extends JpaRepository<RoomEntity, Long> {
    List<RoomEntity> findAllById(Long id);
}

и

RoomEntity roomEntity = roomRepository.getOne(roomId);

Обратите внимание, что EntityNotFoundException будет выброшено, если для этого номера не будет RoomEntity.

Второй раствор

Метод findById в CrudRepository возвращает необязательный параметр, поэтому вы должны правильно с ним обращаться, чтобы получить RoomEntity, если таковой имеется. Например:

RoomEntity roomEntity = optionalEntity.roomRepository.findById(roomId).get();

В этом случае .get() сгенерирует NoSuchElementException, если для этой комнаты нет идентификатора RoomEntity.

Эта статья может помочь понять дополнительные: http://www.baeldung.com/java-optional

0 голосов
/ 19 марта 2019

Попробуйте, у меня все работает

RoomEntity roomEntity = roomRepository.findById(roomId).orElse(null);

0 голосов
/ 05 мая 2018

В соответствии с вашей ошибкой вы получаете Optional<RoomEntity> из метода findAll репозитория и приводите его к RoomEntity.

Вместо RoomEntity roomEntity = roomRepository.findById(roomId); сделайте это

Optional<RoomEntity> optinalEntity = roomRepository.findById(roomId); RoomEntity roomEntity = optionalEntity.get();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...