java - Spring CrudRepository .orElseThrow()

标签 java spring java-8 crud spring-boot

如果数据库查询返回空,抛出异常的正确方法是什么?我正在尝试使用 .orElseThrow() 方法,但它无法编译:

Meeting meeting = meetingRepository.findByMeetingId(meetingId).orElseThrow(new MeetingDoesNotExistException(meetingId));

编译器说:

"he method orElseThrow(Supplier) in the type Optional is not applicable for the arguments (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.");
  }
}

最佳答案

尝试传递 Supplier<MeetingDoesNotExistException> 类型的 lambda 表达式:

Meeting meeting = 
    meetingRepository.findByMeetingId(meetingId)
                     .orElseThrow(() -> new MeetingDoesNotExistException(meetingId));

关于java - Spring CrudRepository .orElseThrow(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26727812/

相关文章:

java - 如何将 List<Obj1> 转换为 Map<Obj1.prop, List<Obj1.otherProp>

java - 为什么 Java 8 u31 中不再有时区文件?

java - 当收到来自服务器的消息时,如何在 Android 客户端上启动新的 Activity

java - 在单选按钮可绘制的左侧添加填充

java - 在 MockMvcResultHandlers 中找不到 get() 方法

java - 如何将 spring.cloud.stream.kafka.bindings 配置属性应用于所有消费者

java - Spring中HTTP请求是如何解码的?

java - 如何在 Hudson 3.2.1 中运行 "file upload"测试用例

java-javaagent : printing java command use guidelines

java - 如何在ubuntu 14.04中安装32位系统的eclipse neon版本