我正在编写一个Sping Boot 服务层来更新一个Car
实体-但问题是FindById方法的复杂性增加了,现在所有返回Optional<>的方法都集成了返回类型Dto而不是实体。
我知道Optional<>很好,因为它迫使开发人员处理未找到,但我打算稍后添加异常处理程序。
服务项目
@Override
public CarCreateDto updateCar(CarCreateDto updateCarDto, Long id) {
Optional<Car> CarOptional = CarRepository.findById(id);
return CarOptional.map(Car -> {
CarMapper.partialUpdate(updateCarDto, Car);
return CarMapper.toDto(CarRepository.save(Car));
});
}
上面的问题是,Optional<>通过Entity向上冒泡到Dto,导致当它期望Carbide Dto时返回Optional类型。
如何在服务层上最好地处理这个简单的更新方法,并使该方法返回Dto类型。
3条答案
按热度按时间pcrecxhr1#
如果你不想返回Optional<>类型,用getById替换findById这个方法作为spring Boot 约定返回Car类型,然后将其Map到Dto。这可以是一种更简单的更新方法。
o8x7eapl2#
您可以使用
Optional.map()
进行操作。只有当可选的不为空时,才会调用任何操作。如果存在值,则返回一个Optional描述(就像通过ofNullable(T))将给定Map函数应用于该值的结果,否则返回空Optional。如果Map函数返回null结果,则此方法返回空Optional。
当前的处理是抛出异常,如果操作导致空可选(或初始值为空),但您可以使用
orElseGet()
或orELse()
来提供回退值,如果这是您的场景需要的话。所有的Optional javadoc。
ldioqlga3#
你好,我想你正在努力实现像下面这样的东西-