Java 如何检查可选值是否为null以及如何将其传递给其他方法?
我需要将rest控制器类方法中的Java 如何检查可选值是否为null以及如何将其传递给其他方法?,java,spring,api,http,optional,Java,Spring,Api,Http,Optional,我需要将rest控制器类方法中的dates传递到服务类中的getCars()方法,该方法将检索在给定时间戳日期注册的车辆,如果时间戳dates(其可选)为空,则它将检索所有车辆。 我认为当前的实现将不起作用,因为如果dates为null,那么它就不能被传递到getCars()中,后者需要Long类型的值。我应该在哪里以及如何检查dates是否为空,以及如何将相应的值传递到getCars()并调用适当的方法 @GetMapping(value = "/get/cars") pu
dates
传递到服务类中的getCars()
方法,该方法将检索在给定时间戳日期注册的车辆,如果时间戳dates
(其可选)为空,则它将检索所有车辆。
我认为当前的实现将不起作用,因为如果dates
为null,那么它就不能被传递到getCars()
中,后者需要Long
类型的值。我应该在哪里以及如何检查dates
是否为空,以及如何将相应的值传递到getCars()
并调用适当的方法
@GetMapping(value = "/get/cars")
public CarList CarController(@Param("dateTs") Optional<Long> dateTs) {
return ResponseEntity.ok(carService.getCars((Long) dateSt.get());
}
@GetMapping(value=“/get/cars”)
公共CarList CarController(@Param(“日期”)可选日期){
返回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;
}
public List getCars(长日期){
卡利斯特名单;
if(dateSt!=null){
carList=carReposistory.retrieverRegisteredcars(dateSt);}
否则{
carList=carReposistory.retrieveAllCars();}
返回卡利斯特;
}
您可以通过两种方式完成。通过可选的getCars
或不通过。
通过时:
public List<Car> getCars(Optional<Long> dateSt) {
if(dateSt.isPresent()){
return carReposistory.retrieveRegisteredCars(dateSt.get());
}
return carReposistory.retrieveAllCars();
}
更新
或者直接传递空值
return ResponseEntity.ok(carService.getCars((Long) dateSt.orElse(null)));
您可以通过两种方式完成。通过可选的方式传递到
getCars
或不传递。
通过时:
public List<Car> getCars(Optional<Long> dateSt) {
if(dateSt.isPresent()){
return carReposistory.retrieveRegisteredCars(dateSt.get());
}
return carReposistory.retrieveAllCars();
}
更新
或者直接传递空值
return ResponseEntity.ok(carService.getCars((Long) dateSt.orElse(null)));
您通常不希望将
可选作为参数传递,但是我不知道它是否适用于REST控制器。请参阅
既然这么说了,你应该在你的服务中有两种方法,一种是当它存在时,一种是当它不存在时
控制器
@GetMapping(value = "/get/cars")
public CarList CarController(@Param("dateTs") Optional<Long> dateTs) {
return ResponseEntity.ok(
dateTs.map(carService::getRegisteredCars)
.orElseGet(carService::getAllCars)
);
}
@GetMapping(value=“/get/cars”)
公共CarList CarController(@Param(“日期”)可选日期){
回复回复。好的(
map(carService::getRegisteredCars)
.OrelGet(carService::getAllCars)
);
}
服务
public List<Car> getRegisteredCars(Long dateSt) {
return carReposistory.retrieveRegisteredCars(dateSt);
}
public List<Car> getAllCars() {
return carReposistory.retrieveAllCars();
}
公共列表getRegisteredCars(长日期){
返回carrepository.retrieverregisteredcars(dateSt);
}
公共列表getAllCars(){
返回carReposistory.retrieveAllCars();
}
您通常不希望将可选的
作为参数传递,但是我不知道它是否适用于REST控制器。请参阅
既然这么说了,你应该在你的服务中有两种方法,一种是当它存在时,一种是当它不存在时
控制器
@GetMapping(value = "/get/cars")
public CarList CarController(@Param("dateTs") Optional<Long> dateTs) {
return ResponseEntity.ok(
dateTs.map(carService::getRegisteredCars)
.orElseGet(carService::getAllCars)
);
}
@GetMapping(value=“/get/cars”)
公共CarList CarController(@Param(“日期”)可选日期){
回复回复。好的(
map(carService::getRegisteredCars)
.OrelGet(carService::getAllCars)
);
}
服务
public List<Car> getRegisteredCars(Long dateSt) {
return carReposistory.retrieveRegisteredCars(dateSt);
}
public List<Car> getAllCars() {
return carReposistory.retrieveAllCars();
}
公共列表getRegisteredCars(长日期){
返回carrepository.retrieverregisteredcars(dateSt);
}
公共列表getAllCars(){
返回carReposistory.retrieveAllCars();
}
请注意:Long
可以是null
,因此可以传递给getCars(Long)
。它是一个Long
不能null
,因为它是一个原语
问题可能是Optional#get()
抛出一个NoSuchElementException
如果Optional
中没有值(其值为null
),则可以使用Optional#orElse()
,如:
return ResponseEntity.ok(carService.getCars((Long) dateSt.orElse(null));
正如其他答案所建议的那样,使用可选的#isPresent()
,是一个(可能更好)选项
有关参考信息,请检查orElse
的
注2:还要检查这个问题及其答案:只需注意:一个长的可以null
,因此它可以传递给getCars(Long)
。它是一个Long
,不能null
,因为它是一个原语
问题可能是Optional#get()
抛出一个NoSuchElementException
如果Optional
中没有值(其值为null
),则可以使用Optional#orElse()
,如:
return ResponseEntity.ok(carService.getCars((Long) dateSt.orElse(null));
正如其他答案所建议的那样,使用可选的#isPresent()
,是一个(可能更好)选项
有关参考信息,请检查orElse
的
注意2:还要检查这个问题及其答案:null可以传递给getCars,只要是一个对象,Long(本机类型)就会有问题,不确定“Long(本机类型)”是什么意思?我必须使用dates
。所以你是说,没有附加值的Long仍然是一个对象。dates
是一个可选值,因此如果没有提供值,那么我假设可以进一步处理和传递没有值的Long对象。Will dateSt.get()如果为空,会导致任何问题吗?我建议您阅读javadocs,以获取“如果此可选项中存在一个值,则返回该值,否则将抛出NoSuchElementException”。因此,是的,您将抛出一个异常,正如您可以使用orElse(null)的一些答案中所示null可以传递给getCars,只要它是一个对象,您就会遇到Long(本机类型)的问题,不确定“Long(本机类型)”是什么意思?我必须使用dates
。所以你是说,没有附加值的Long仍然是一个对象。dates
是一个可选值,因此如果没有提供值,那么我假设可以进一步处理和传递没有值的Long对象。Will dateSt.get()如果为空,会导致任何问题吗?我建议您阅读javadocs,以获取“如果此可选项中存在一个值,则返回该值,否则将抛出NoSuchElementException”。因此,是的,您将抛出一个异常,正如您可以使用orElse(null)的一些答案中所示