我有一个使用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作为返回类型。在这种情况下,建议使用什么方法。
答案 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层处理它,那么它不是一个好的设计实践。