方法根据条件返回类型

时间:2018-01-31 08:40:55

标签: java spring

我有一个使用spring Jpa进行各种数据库操作的方法。

public Employee find(int empId) {

Employee emp = employeeDao.findOne(empId):

if(emp == null)
    return "Records doesnot exists for this Id";
else
   return emp;


}

在上面的代码中,可以存在用于共享错误原因的各种字符串消息。由于返回类型只能是一个,所以我不能返回字符串和Employee对象,因为它们属于不同的类型。

我也不想使用object作为返回类型。在这种情况下,建议使用什么方法。

6 个答案:

答案 0 :(得分:4)

如果员工不存在,则使用适当的消息抛出异常

答案 1 :(得分:2)

您可以从Optional<Employee>方法返回DAO,然后在服务中,如果Optional不存在,请使用您选择的消息抛出异常。

示例:

Employee employee = employeDAO.findById(employeeId).orElseThrow(() -> new EmployeeNotFoundException("Employee not present in the DB"));

答案 2 :(得分:1)

如果找不到String,您不希望返回Employee。该方法的调用者会对String做什么?

改为抛出异常:

public Employee find(int empId) throws Exception
{
    Employee emp = employeeDao.findOne(empId):

    if(emp == null) {
         throw new Exception("Records doesnot exists for this Id");
    }

    return emp;
}

您可能想要使用Exception的一些自定义子类。

您可以出于不同的原因抛弃不同的Exception类型,或者使用不同的消息投放相同的Exception类型。

答案 3 :(得分:1)

在您的实体中包含错误消息详细信息是 BIG NO 。别这么做。

明智地使用例外。

public Employee find(int empId) {

Employee emp = employeeDao.findOne(empId):

if(emp == null){

  throw new EntityNotFoundException("Employee does not exists for this Id");

} else if (emp !=null && emp.getDetails() ==null){

    throw new EntityNotFoundException("Employee Records does not exists for this Id");


} else return emp;

}

这就是典型的DAO方法。

如果您被限制不使用例外,请使用通用Object进行穿梭。

public class GenericEntityResponse {

public Entity response;
public List<Entity> responses;
public String errorMessage; 
//other common things   

}

将此作为对所有DAO方法的响应。但我建议第一种方式。

答案 4 :(得分:1)

您可以使用以下任何一种方式:

选项1:

抛出异常(例如EntityNotFoundException),并将您的消息包含在null

public Employee find(int empId) {
  Employee emp = employeeDao.findOne(empId):
  if(emp == null)
     throw new EntityNotFoundException("Records doesn't exists for this Id");
  else
     return emp;
}

选项2:

返回null并处理调用者函数中的消息部分。

  public Employee find(int empId) {
     return employeeDao.findOne(empId):
  }

  public String callerMethod(){
     String msg = "Record Exist";
     if(Objects.isNull(find(3))){
        msg = "Records doesn't exists for this Id";
     }
     return msg; 
  }

选项3:(接近您的要求)

创建一个包含Employee和ErrorMessage的新EmployeeResponse类。

@Data
public class EmployeeResponse{
   private Employee employee;
   private String error;
}

public EmployeeResponse find(int empId) {
   EmployeeResponse response = new EmployeeResponse
   Employee emp = employeeDao.findOne(empId):
   if(emp == null)
      response.setError("Records doesn't exists for this Id");
   else
      response.setEmployee(emp);

   return emp;
}

PS - 理想的方法是选项1或2。

答案 5 :(得分:1)

我认为你不应该检查空值,因为Spring JPA定义了这个返回类型,并将它留给消耗类来处理它。 此外,如果你在DAO层处理它,那么它不是一个好的设计实践。