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作为StudentDTOsetter 和 getter 方法的私有成员。在服务中,当出现异常时,在's 成员中实例化ErrorActionResponse并设置相同。StudentDTO因此,客户必须首先检查是否getErrorActionResponse()返回null。如果是,则进行正常处理,否则,处理异常情况。

班级学生DTO:

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 回答
1

如果您想返回一个Collection(如我之前回答的评论中所述),我建议您创建一个带有两个键的 Map 。如果没有例外,第一个键值对将StudentDTO分别包含“students”字符串和集合。并且,第二个键值对将分别包含“异常”字符串和空值。如果有异常,第一个键值对将分别包含“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 );

希望这可以帮助...

于 2012-05-29T09:25:24.320 回答