2016-01-28 47 views
2

以下代碼是大型項目的一部分。java - 是否直接分配函數調用變量(沒有new())引發異常?

概述是,我試圖訪問使用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; 

} 

我發現,沒有new Employee()foundEmployee,因爲是emp。 我不確定,但我認爲這會導致異常。 我正確嗎?

另外,請告訴我什麼例外,我應該拋出foundEmployeenull

其他信息 - 這是幫助說明:

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 
+0

什麼是錯誤引發? – iMBMT

+0

「* foundEmployee沒有新的Employee()*」=>不清楚。你能詳細說明嗎? – assylias

+0

這只是一個參考,沒有像'Car c = new Car()'這樣的新關鍵字。 – cst1992

回答

8

在行

Employee foundEmployee = employeeRepository.findOne(empId); 

我們可以推測EmployeeRepository.findOne()將返回Employee一個實例。這不會導致編譯器錯誤,並且如果在運行時發生異常,它將在findOne()之內。

關於你應該怎麼做在nullfoundEmployee的事件,這是一個真正的設計決定,你將不得不作出。一種選擇是讓方法返回null讓消費者知道傳入的EmployeeRequest有一個嚴重的問題。

另一種選擇是創建自己的Exception,然後在nullfoundEmployee的情況下拋出它。

更新:

在你需要傳遞的東西回到你的UI光,另一種選擇是創建一個空EmployeeReponse對象,並返回:

EmployeeResponse response = new EmployeeResponse(); 
response.setAddress(null); 
response.setName(null); 

確保你的框架可以將數值放入用戶友好的東西,例如所有字段的空字符串。

+0

我編輯了該問題以包含幫助工具提示。 – cst1992

+0

編輯並沒有真正改變我在回答中對你說的話。 –

+0

我將使用Web UI進行創建/更新/刪除,因此我希望用戶通過某條消息知道更新失敗。 – cst1992

相關問題