Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何检查可选值是否为null以及如何将其传递给其他方法?_Java_Spring_Api_Http_Optional - Fatal编程技术网

Java 如何检查可选值是否为null以及如何将其传递给其他方法?

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

我需要将rest控制器类方法中的
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)的一些答案中所示