如果数据库查询返回空,抛出异常的正确方法是什么?我正在尝试使用.orElseThrow()
方法,但它不会编译:
Meeting meeting = meetingRepository.findByMeetingId(meetingId).orElseThrow(new MeetingDoesNotExistException(meetingId));
编译器说:
“自选类型中的方法orElseThrow(Supplier)不适用于参数(MeetingRestController.MeetingDoesNotExistException)
是否可以使用lambda表达式执行此操作?
CrudRepository:
import java.util.Optional;
import org.springframework.data.repository.CrudRepository;
public interface MeetingRepository extends CrudRepository<Meeting, Long>{
Optional<Meeting> findByMeetingId(Long id);
}
例外:
@ResponseStatus(HttpStatus.CONFLICT) // 409
class MeetingDoesNotExistException extends RuntimeException{
public MeetingDoesNotExistException(long meetingId){
super("Meeting " + meetingId + " does not exist.");
}
}
答案 0 :(得分:25)
尝试传递Supplier<MeetingDoesNotExistException>
类型的lambda表达式:
Meeting meeting =
meetingRepository.findByMeetingId(meetingId)
.orElseThrow(() -> new MeetingDoesNotExistException(meetingId));
答案 1 :(得分:1)
错误意味着它所说的内容。
orElseThrow
的文档声明它需要Supplier
作为参数。
您已声明您的例外情况为RuntimeException
,而不是Supplier
。因此,orElseThrow()
不适用于该参数类型。您必须传递Supplier
,而不是RuntimeException
。
使用lambda表达式会更简单。