以下代码是一个大型项目的一部分。
概述是我正在尝试使用 Spring MVC 访问数据库。我想根据请求更新字段并发送关于数据库发回的值的响应。
代码:
@Override
@Transactional
public EmployeeResponse update(EmployeeRequest employeeRequest) {
Employee emp = new Employee();
UUID empId = UUID.fromString(employeeRequest.getId());
Employee foundEmployee = employeeRepository.findOne(empId);
if (foundEmployee != null) {
foundEmployee.setAddress(employeeRequest.getAddress());
// similarly set 4 fields of foundEmployee
emp = employeeRepository.save(foundEmployee);
}
EmployeeResponse response = new EmployeeResponse();
response.setAddress(emp.getAddress());
// similarly set 4 fields of response
return response;
}
我发现 foundEmployee
没有 new Employee()
,而 emp
有。
我不确定,但我认为这会导致异常。
我说得对吗?
另外,请告诉我当 foundEmployee
为 null
时我应该抛出什么异常。
附加信息 - 这是帮助显示的内容:
org.springframework.data.repository.CrudRepository
public T findOne(ID id)
Retrieves an entity by its id.
Parameters:
id - must not be null.
Returns:
the entity with the given id or null if none found
Throws:
IllegalArgumentException - if id is null
最佳答案
行内
Employee foundEmployee = employeeRepository.findOne(empId);
我们可以假定 EmployeeRepository.findOne()
将返回 Employee
的实例。这不会导致编译器错误,如果在运行时发生异常,它会在 findOne()
中。
关于在 null
foundEmployee
的情况下您应该做什么,这实际上是您必须做出的设计决定。一种选择是让方法返回 null
,让消费者知道传入的 EmployeeRequest
存在严重问题。
另一种选择是创建您自己的 Exception
,然后在 null
foundEmployee
的情况下抛出它。
更新:
鉴于您需要将一些东西传回您的 UI,另一种选择是创建一个空的 EmployeeReponse
对象并返回它:
EmployeeResponse response = new EmployeeResponse();
response.setAddress(null);
response.setName(null);
确保您的框架可以将 null
值编码为用户友好的内容,例如所有字段的空字符串。
关于java - 直接从函数调用(没有 new())分配变量会引发异常吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35055259/