2012-05-28 111 views
1

返回錯誤我有一個這樣的類:在Java Web服務

@Override 
public StudentDTO getStudent(@WebParam(name = "name") String studentName) { 
    StudentDTO student = new StudentDTO(); 
    try { 
     student = studentService.findStudentByName(studentName); 
    } catch (Exception e) { 
     return new ErrorActionResponse("student couldn't find by name"); 
    } 
    return student; 
} 

像往常一樣,這並不因爲返回類型的工作是StudentDTO我嘗試返回另一個類型的類:ErrorActionResponse。 ErrorActionResponse是一個具有關於錯誤的詳細信息的錯誤類。

如何設計可處理錯誤情況的Web服務體系結構? (在我的REST架構我寫錯誤信息到響應,併發送錯誤客戶端)

回答

1

如果你想返回一個Collection(如我在前面的回答中的評論中所述),我建議你用兩個鍵創建一個Map。如果沒有例外,則第一個鍵值對將分別包含「students」字符串和StudentDTO集合。而第二個鍵值對將分別包含「異常」字符串和空值。如果有例外,第一個鍵值對將分別包含「students」字符串和空值。並且,第二個鍵值對將分別爲「例外」字符串和一個ErrorActionResponse對象。例如:

也不例外情況:

Map<String, List> result = new HashMap<String, List>(); 
result.put("students", COLLECTION_OF_STUDENTS); 
result.put("exception", null); 

也不例外情況:

Map<String, List> result = new HashMap<String, List>(); 
result.put("students", null); 
result.put("exception", ErrorActionResponse_OBJECT); 

希望這有助於...

1

對於影響最小,我建議: 使ErrorActionResponse作爲StudentDTO與setter和getter方法的私有成員。在服務中,當出現異常時,例化ErrorActionResponse並在StudentDTO的成員中設置相同。因此,客戶必須首先檢查getErrorActionResponse()是否返回null。如果是這樣,則執行正常處理,處理異常情況。

CLASS StudentDTO:

public class StudentDTO { 

    ... 
    private ErrorActionResponse errorActionResponse; 
    ... 

    public ErrorActionResponse getErrorActionResponse() { 
     return errorActionResponse; 
    } 

    public void setErrorActionResponse(ErrorActionResponse errorActionResponse) { 
     this.errorActionResponse = errorActionResponse; 
    } 

} 

服務:

@Override 
public StudentDTO getStudent(@WebParam(name = "name") String studentName) { 
    StudentDTO student = new StudentDTO(); 
    try { 
     student = studentService.findStudentByName(studentName); 
    } 
    catch (Exception e) { 
     student.setErrorActionResponse(new ErrorActionResponse("student couldn't find by name")); 
    } 
    finally { 
     return student; 
    } 
} 

客戶端代碼:

if(student.getErrorActionResponse() == null) { 
    // do normal processing 
} 
else { 
    // handle exception case 
} 

在上述情況下,DTO有ErrorActionResponse元件,其不涉及它的基本情況。所以,爲了更清潔的方法,我建議你考慮Adapter pattern

+0

如果我嘗試返回學生的名單,我將需要設置所有學生的errorActionResponse在列表 – kamaci

+0

我同意。我的第一個建議是針對您的OP要求 - 返回學生而不是列表的方法(您現在要說明)。 – San