1

私はそのようなクラスを持っています:

@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 アーキテクチャでは、エラー情報を応答に書き込み、クライアント側にエラーを送信します)

4

2 に答える 2

1

影響を最小限に抑えるために、セッターメソッドとゲッターメソッドを使用しErrorActionResponseてのプライベートメンバーとして作成することをお勧めします。StudentDTOサービス中、例外が発生した場合は、インスタンス化してのメンバー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を検討することをお勧めします。

于 2012-05-29T07:39:00.390 に答える