我在我的Spring應用程序的服務層中創建一個類。如何將返回值和驗證錯誤傳遞給方法的調用者?
一種方法是:
/**
* Creates a new user account.
* @return Returns true if the password reset went ok, otherwise false.
*/
boolean confirmPasswordReset(UserAccount account, String confirmationId, String newPassword);
但是,這種方法的簽名是無法給呼叫者什麼可能做了確認失敗的任何信息。我有驗證規則;密碼不能是用戶名,密碼必須有8個字符等。如果用戶未能提供強密碼,我想拒絕確認並返回false。不過,我也想傳達驗證錯誤。
所以我有以下解決方案,但我不確定這是否是一個好主意。這是我的嘗試:
(我使用Java 8,因此可選類)
public class OperationResult<T> {
private Optional<T> returnObject;
private List<ConstraintViolation> violations;
public OperationResult(Optional<T> returnObject, List<ConstraintViolation> violations) {
this.returnObject = returnObject;
this.violations = violations;
}
public Optional<T> getReturnObject() {
return returnObject;
}
public List<ConstraintViolation> getViolations() {
return violations;
}
}
然後我改變了服務層的方法來返回值:
OperationResult<Boolean> confirmPasswordReset(UserAccount account, String confirmationId, String newPassword);
這只是一個例子,但我有幾個方法,這將是有用的。
從設計的角度看,這看起來不好嗎?拋出異常是因爲密碼太弱,或者密碼與用戶名相同,看起來不是一個好的解決方案。
如果密碼太短,並且與用戶名相同,那麼您希望向用戶或其中的一個顯示驗證錯誤? – 2014-11-03 16:31:22
這兩個錯誤,我想給調用者提供什麼是錯誤的信息。 – LuckyLuke 2014-11-03 16:55:53
另請注意,可選不是可序列化的... – keuleJ 2014-11-03 17:27:39