【发布时间】:2019-01-26 01:05:46
【问题描述】:
我在 Spring Rest web 服务中使用 @ControllerAdvice 和 ResponseEntityExceptionHandler 处理 REST 异常。到目前为止一切正常,直到我决定将 URI 路径(发生异常)添加到 BAD_REQUEST 响应中。
@ControllerAdvice
public class RestResponseEntityExceptionHandler extends ResponseEntityExceptionHandler {
@Override
protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex,
HttpHeaders headers, HttpStatus status, WebRequest request) {
logger.info(request.toString());
return handleExceptionInternal(ex, errorMessage(HttpStatus.BAD_REQUEST, ex, request), headers, HttpStatus.BAD_REQUEST, request);
}
private ApiError errorMessage(HttpStatus httpStatus, Exception ex, WebRequest request) {
final String message = ex.getMessage() == null ? ex.getClass().getName() : ex.getMessage();
final String developerMessage = ex.getCause() == null ? ex.toString() : ex.getCause().getMessage();
return new ApiError(httpStatus.value(), message, developerMessage, System.currentTimeMillis(), request.getDescription(false));
}
ApiError 只是一个 Pojo 类:
public class ApiError {
private Long timeStamp;
private int status;
private String message;
private String developerMessage;
private String path;
}
但是 WebRequest 并没有给出任何 api 来获取请求失败的路径。我试过了:
request.toString() 返回 -> ServletWebRequest: uri=/signup;client=0:0:0:0:0:0:0:1request.getDescription(false) 返回 -> uri =/signupgetDescription 非常接近要求,但不符合要求。有没有办法只获取 uri 部分?
【问题讨论】:
标签: spring spring-mvc spring-rest