Измените метод RequestMapping или добавьте дополнительно в Java 8 из Java 7 - PullRequest
1 голос
/ 21 апреля 2019

Я пытался следовать учебному пособию, в котором они в основном используют Java 7, и в настоящее время я работаю над средой Java 8, поэтому я хотел бы знать, какой будет версия Java кода, который я пытаюсь работатьon - в настоящее время я получаю много ошибок, используя Optional, который Eclipse предложил исправить некоторые первоначальные ошибки, но я застрял на некоторых.

Код java7, как показано ниже:

@RequestMapping("/reservations")
    public Reservation updateReservation1(ReservationUpdateRequest request) {
        Reservation reservation = reservationRepo.findOne(request.getId());
        reservation.setNumberOfBags((request.getNumOfBags());
        reservation.setCheckedIn(request.getCheckedIn());
        return reservationRepo.save(reservation);
    }

java8 с ошибкой

@RequestMapping("/reservations")
    public Optional<Reservation> updateReservation(ReservationUpdateRequest request) {
        Optional<Reservation> reservation = reservationRepo.findById(request.getId());
        reservation.setNumberOfBags((request.getNumOfBags());
        reservation.setCheckedIn(request.getCheckedIn());
        return reservationRepo.save(reservation);
    }

здесь в коде java8 eclipse ide дает мне ошибку в строке номер 3 - то есть, когда я пытаюсь установить значение в reservation.setNumberOfBags(), оно показывает The method setNumberOfBags(int) is undefined for the type Optional<Reservation> - если естьможно помочь?

Ответы [ 2 ]

4 голосов
/ 21 апреля 2019

Вы должны вернуть Reservation вместо Optional<Reservation> (я думаю, вы используете Spring Data, см. Метод сохранения).

Если вы хотите создать исключение, если бронь не найдена, используйте:

public Reservation updateReservation(ReservationUpdateRequest request) {
        Reservation reservation = reservationRepo.findById(request.getId())
            .orElseThrow(() -> new EntityNotFoundException("Reservation not found"));
        reservation.setNumberOfBags(request.getNumOfBags());
        reservation.setCheckedIn(request.getCheckedIn());
        return reservationRepo.save(reservation);
    }

Если вы хотите вернуть код ошибки 404, когда он не найден:

public ResponseEntity<Reservation> updateReservation(ReservationUpdateRequest request) {
     return reservationRepo.findById(request.getId())
         .map(r -> {
              r.setNumberOfBags(request.getNumOfBags());
              r.setCheckedIn(request.getCheckedIn());
              return ResponseEntity.ok().body(reservationRepo.save(r));
          }).orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
    }

И RequestMapping странный, вы должны использовать PUT с идентификатором в URL вместо тела запроса.

@PutMapping("/reservations/{id}")
public ResponseEntity<Reservation> updateReservation(@PathParam("id") Long id, ReservationUpdateRequest request) {
     return reservationRepo.findById(id)
         .map(r -> {
             r.setNumberOfBags(request.getNumOfBags());
             r.setCheckedIn(request.getCheckedIn());
             return ResponseEntity.ok().body(reservationRepo.save(r));
         }).orElse(new ResponseEntity<>(HttpStatus.NOT_FOUND));
}
1 голос
/ 21 апреля 2019
@RequestMapping("/reservations")
public Optional<Reservation> updateReservation(ReservationUpdateRequest request) {
    Optional<Reservation> reservation = reservationRepo.findById(request.getId());
    if(reservation.isPresent()) {
        Reservation actReservation = reservation.get();
        actReservation .setNumberOfBags((request.getNumOfBags());
        actReservation .setCheckedIn(request.getCheckedIn());
        return reservationRepo.save(actReservation );
    }
    else {
        return Optional.empty();
    }
}
...