我正在尝试实现一个自定义 HttpStatus 代码系统来提供有关我的 REST 服务的错误信息。
为此,我实现了一个新的枚举 CustomHttpStatus
public enum CustomHttpStatus {
ERROR1(42, "Error 1"),
ERROR2(43, "Error 2"),
ERROR3(44, "Error 3"),
ERROR4(45, "Error 4"),
ERROR5(46, "Error5");
private CustomHttpStatus(int value, String reason) {
this.value = value;
this.reason = reason;
}
private final int value;
private final String reason;
public int getValue() {
return value;
}
public String getReason() {
return reason;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,我有一个类,它携带有关错误的信息并管理标准 HTTPStatus 和我的 CustomHttpStatus
public class ApiError {
private HttpStatus status;
private CustomHttpStatus customStatus;
private String message;
private List<String> errors;
public HttpStatus getStatus() {
return status;
}
public void setStatus(HttpStatus status) {
this.status = status;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public List<String> getErrors() {
return errors;
}
public void setErrors(List<String> errors) {
this.errors = errors;
}
public ApiError(HttpStatus status, String message, List<String> errors) {
super();
this.status = status;
this.message = message;
this.errors = errors;
}
public ApiError(HttpStatus status, String message, String error) {
super();
this.status = status;
this.message = message;
errors = Arrays.asList(error);
}
public ApiError(CustomHttpStatus customStatus, String message, List<String> errors) {
super();
this.customStatus = customStatus;
this.message = message;
this.errors = errors;
}
public ApiError(CustomHttpStatus customStatus, String message, String error) {
super();
this.customStatus = customStatus;
this.message = message;
errors = Arrays.asList(error);
}
public CustomHttpStatus getCustomStatus() {
return customStatus;
}
public void setCustomStatus(CustomHttpStatus customStatus) {
this.customStatus = customStatus;
}
}
Run Code Online (Sandbox Code Playgroud)
接下来,在@ControllerAdvice类中我定义如何响应错误,例如
@ExceptionHandler(PlateNumberExistsExceptionAPI.class )
protected ResponseEntity<Object> handlePlateNumberExistExceptionAPI(PlateNumberExistsExceptionAPI ex, WebRequest request) {
StringBuilder builder = new StringBuilder();
builder.append(ex.getMessage());
ApiError apiError = new ApiError(CustomHttpStatus.ERROR1,
ex.getLocalizedMessage(), builder.substring(0, builder.length()));
logger.debug("ApiError is " + apiError.toString());
logger.error("Plate exists - API", ex);
return ResponseEntity.status(apiError.getCustomStatus().getValue())
.headers(new HttpHeaders())
.contentType(MediaType.APPLICATION_JSON).body(apiError);
}
Run Code Online (Sandbox Code Playgroud)
问题是我需要使用BodyBuilderResponseEntity 的构造函数想要一个HttpStatus值。应用程序响应我的自定义错误,但没有消息,并且需要 60000 毫秒才能回答...我不知道为什么需要这么长时间,很快就会遇到异常并生成 ApiError,问题出在响应上
| 归档时间: |
|
| 查看次数: |
2087 次 |
| 最近记录: |