我们该如何处理MultiException
包含 Throwable 对象列表的球衣?
异常映射器技术在一个异常的情况下工作得很好,但如何处理多个异常呢?
您可以通过对 MultiException 调用 getErrors() 来获取异常列表。 MultiException类中定义的方法是:
public List<Throwable> getErrors() {
synchronized (this.lock) {
return Collections.unmodifiableList(this.throwables);
}
}
在映射器中,您可以使用此列表来创建错误响应。这是一个简单的映射器类,可用于处理 MultiException 中的所有异常:
public class MultiExceptionMapper implements ExceptionMapper<MultiException>{
private static final String TYPE="ERROR";
private static final Status ERROR_STATUS=Status.INTERNAL_SERVER_ERROR;
@Override
public Response toResponse(MultiException exception) {
List<MyResponseError> myErrors= new ArrayList<>();
for (Throwable throwable:exception.getErrors()){
MyResponseError error = new MyResponseError(throwable.getMessage());
error.setType(TYPE);
myErrors.add(error);
}
Status errorStatus = ERROR_STATUS;
ErrorsDTO errors = new ErrorsDTO(errorStatus,myErrors);
return errors.generateResponse();
}
}
错误响应由 ErrorsDTO 类生成:
@XmlRootElement
public class ErrorsDTO extends ResponseDTO {
private List<MyResponseError> errors;
private String status="ERROR";
private transient Status errorStatus=Status.NOT_FOUND;
private int errorCode;
/**
* Default constructor is required to support serialization/deserialization
*/
public ErrorsDTO(){
}
/**
* If status is not provided set status as NOT_FOUND
* @param error
*/
public ErrorsDTO(MyResponseError error){
this(Status.NOT_FOUND,error);
}
public ErrorsDTO(Status errorStatus, MyResponseError error){
List<MyResponseError> errors = new ArrayList<>();
errors.add(error);
this.errorStatus= errorStatus;
this.errors =errors;
}
public ErrorsDTO(List<MyResponseError> errors){
this(Status.NOT_FOUND,errors);
}
public ErrorsDTO(Status errorStatus, List<MyResponseError> errors){
if(errors==null){
errors = new ArrayList<>();
}
this.errorStatus = errorStatus;
this.errors = errors;
}
@Override
public Response generateResponse() {
if(this.errorStatus==null){
this.errorStatus= Status.NOT_FOUND;
}
this.errorCode= this.errorStatus.getStatusCode();
ResponseBuilder builder = Response.status(errorStatus);
builder.entity(this);
builder.type(MediaType.APPLICATION_JSON);
Response response = builder.build();
return response;
}
@XmlElement(name="errors")
public List<MyResponseError> getErrors() {
return errors;
}
public void setErrors(List<MyResponseError> errors) {
this.errors = errors;
}
@XmlElement
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
@XmlTransient
public Status getErrorStatus() {
return errorStatus;
}
public void setErrorStatus(Status errorStatus) {
this.errorStatus = errorStatus;
}
@XmlElement
public int getErrorCode() {
return errorCode;
}
public void setErrorCode(int errorCode) {
this.errorCode = errorCode;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)