我有3个spring boot微服务,这是一个端点暴露于公共世界的业务服务,还有2个基础服务,该服务通过HTTP调用进行调用。
当前异常是通过这种方式处理的。每个服务中都有一个全局RestHandler和ApiError。
public class ApiError {
private HttpStatus status;
private String timestamp;
private final boolean hasError = true;
private List<Error> errors;
private ApiError() {
timestamp = LocalDateTime.now().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME);
}
public ApiError(HttpStatus status) {
this();
this.status = status;
}
public ApiError(HttpStatus status, Throwable ex) {
this();
this.status = status;
}
public HttpStatus getStatus() {
return status;
}
public void setStatus(HttpStatus status) {
this.status = status;
}
public String getTimestamp() {
return timestamp;
}
public void setTimestamp(String timestamp) {
this.timestamp = timestamp;
}
public boolean isHasError() {
return hasError;
}
public List<Error> getErrors() {
return errors;
}
public void setErrors(List<Error> errors) {
this.errors = errors;
}
}
说我在两个基础服务之一中得到一个异常,我在全局异常处理程序中处理该异常,并与ApiError进行序列化和捆绑,并返回与捆绑的ApiError一起的ResponseEntity。
在商务服务中,我反序列化主体,然后再次将其与ApiError捆绑在一起,然后将响应发送回去。
这增加了很多代码重复。我当时只是想从基础微服务中抛出异常,将异常捕获到业务服务中并在全局处理程序中进行处理以返回自定义响应。
这有效吗?还是可以做得更好?