我需要通过 dateTs
从rest控制器类方法到 getCars()
方法,该方法将检索在给定时间戳日期注册的汽车,并且如果时间戳 dateTs
(可选)为空,则它将检索所有车辆。我认为目前的实施不会奏效,因为如果 dateTs
如果为null,则无法将其传递到 getCars()
它需要类型的值 Long
. 我应该在哪里以及如何检查 dateTs
不为空以及如何将相应的值传递到 getCars()
调用合适的方法?
@GetMapping(value = "/get/cars")
public CarList CarController(@Param("dateTs") Optional<Long> dateTs) {
return ResponseEntity.ok(carService.getCars((Long) dateSt.get());
}
服务类方法:
public List<Car> getCars(Long dateSt) {
List<Car> carList;
if(dateSt != null){
carList = carReposistory.retrieveRegisteredCars(dateSt);}
else{
carList = carReposistory.retrieveAllCars();}
return carList;
}
3条答案
按热度按时间wgx48brx1#
只是一张纸条:a
Long
可以是null
,因此可以传递给getCars(Long)
. 它是一个long
那不可能null
,因为它是原始的。问题可能是
Optional#get()
抛出NoSuchElementException
如果在Optional
(其价值为null
),你可以用Optional#orElse()
例如:使用
Optional#isPresent()
正如其他答案所暗示的,这是一个(可能更好)的选择。为了便于参考,请查阅
orElse
.注2:还要检查这个问题及其答案:为什么Java8的optional不能用在参数中
jtw3ybtb2#
你可以用两种方法来做。可选择通过
getCars
或者没有。通过时:不传递:必须创建两个独立的方法:
并在控制器中使用它们:
更新
或者只传递null
cfh9epnr3#
你通常不想通过
Optional
s作为参数,但是我不知道它是否适用于rest控制器。看到这个了吗既然这么说了,你应该在你的服务中有两种方法,一种是当它存在时,另一种是当它不存在时。
控制器
服务