更改 RequestMapping 方法或 post 添加 Optional in Java 8 from Java 7
Change in RequestMapping method or post addition of Optional in Java 8 from Java 7
我一直在尝试按照教程进行操作,其中他们基本上使用 java 7,目前我正在使用 java 8 环境,所以我想知道 [= =26=]8 版本的代码,我正在尝试处理 - 目前我在使用 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>
- 如果有人可以提供帮助?
@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();
}
}
你应该 return Reservation
而不是 Optional<Reservation>
(我猜你正在使用 Spring 数据,请参阅保存方法)。
如果您想在未找到预订时抛出异常,请使用:
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);
}
如果您想 return 找不到 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 很奇怪,您应该在 URL 中使用带有 id 的 PUT 而不是请求正文。
@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));
}
我一直在尝试按照教程进行操作,其中他们基本上使用 java 7,目前我正在使用 java 8 环境,所以我想知道 [= =26=]8 版本的代码,我正在尝试处理 - 目前我在使用 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>
- 如果有人可以提供帮助?
@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();
}
}
你应该 return Reservation
而不是 Optional<Reservation>
(我猜你正在使用 Spring 数据,请参阅保存方法)。
如果您想在未找到预订时抛出异常,请使用:
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);
}
如果您想 return 找不到 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 很奇怪,您应该在 URL 中使用带有 id 的 PUT 而不是请求正文。
@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));
}