我正在使用以下方法处理 REST 异常@ControllerAdvice
and ResponseEntityExceptionHandler
在 Spring Rest Web 服务中。到目前为止,一切都工作正常,直到我决定添加URI
路径(发生异常)到错误的请求回复。
@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:1
request.getDescription(false)
返回 ->uri=/注册
getDescription
非常接近要求,但不满足。有什么办法只获取 uri 部分吗?