0

我的 Quarkus REST 应用程序中有几个GET接受 ID 的调用。

/rest/v1/employee/{id}/id

我正在使用活动记录模式来处理数据库请求。来自 Spring,JdbcTemplate只要结果集为空,就会抛出异常。我将使用捕获此异常ControllerAdvice并抛出适当的响应代码(在本例中为 404)。这也适用于所有其他例外情况。

有没有办法配置 Panache / Hibernate 在空结果集上抛出异常?现在,我必须手动检查结果是否为空/null,然后抛出相应的异常。

例如,这是我现在必须做的:

@GET
@Path("/employee/{id}/id")
public Employee getEmployeeById(@PathParam("id") Integer id) {
    Employee employee = Employee.findById(id);

    if (employee == null) {
        throw new EmptyResultDataAccessException("No results found");
    }

    return Employee.findById(id);
}

当我宁愿在异常处理程序中捕获异常并简单地将调用返回到findById(...)

@GET
@Path("/employee/{id}/id")
public Employee getEmployeeById(@PathParam("id") Integer id) {
    return Employee.findById(id);
}

4

1 回答 1

1

findById如果找不到实体,将EntityManager.find()在幕后使用返回 null 。您可以findByIdOptional像这样使用和使用它:

@GET
@Path("/employee/{id}/id")
public Employee getEmployeeById(@PathParam("id") Integer id) {
    return Employee.findByIdOptional(id).orElseThrow(EmptyResultDataAccessException::new);
}
于 2021-03-10T10:43:35.883 回答