Spring中如何从WebRequest获取请求的URI?

2024-04-20

我正在使用以下方法处理 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 部分吗?


找到了解决方案。铸件WebRequest to ServletWebRequest解决了目的。

((ServletWebRequest)request).getRequest().getRequestURI().toString()

返回完整路径 -http://localhost:8080/signup

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring中如何从WebRequest获取请求的URI? 的相关文章

随机推荐

  • C 中的十六进制到字符数组

    Given a string of hex values i e e g 0011223344 so that s 0x00 0x11 etc 如何将这些值添加到 char 数组 相当于说 char array 4 0x00 0x11 您无
  • iOS:接到电话时显示提醒?

    我希望在接到电话时触发本地通知 并显示警报 这可能吗 通话事件可以启动应用程序或触发通知吗 Skype 是如何被解雇的 有推送通知吗 Thanks 当各种事件发生时 您的应用程序委托将接收对各种 UIApplicationDelegate
  • 如何更改故事板上视图控制器的大小以进行编辑?

    我有一个简单的问题 我花了无数的时间试图解决这个问题 如何更改 Xcode Storyboard 中视图控制器的大小以进行编辑 我有一个大的表格 调查问卷 我想放在我的视图控制器上 但我根本无法使用情节提要给我的当前大小 此外 提供的尺寸
  • Shutil.move IOError:[Errno 2] - 当处于循环中时[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 如果我单独
  • 配置 sbt 项目以在“sbt run”中包含外部 Main 方法

    创建一个依赖于外部 jar 的 sbt 项目对我来说很常见 并且旨在使用外部 jar 中的 Main 方法运行 目前 我只是使用 run main xxx 运行它 但我更希望能够将 Main 方法包含在 sbt 提供的 run 选项列表中
  • Django Forms 视图中的自定义错误消息

    这是我的观点 if request method POST form TeacherRegister request POST Gets school object from email domain email form email va
  • TinyMCE - 外部工具栏位置

    我正在尝试与 TinyMCE 合作创建一个多文本框 点击编辑类型的图形内容编辑器 我已经使用 TinyMCE 来添加和删除它们 定位它们并调整它们的大小 单击以编辑它们等等 但有一件事困扰着我 那就是工具栏 我有一个外部工具栏 我试图将其放
  • 检查元素是否在视图中,如果是,则添加类

    我想堆叠元素 当它们进入视图时 它会添加类 active 我不想删除该类 因此一旦添加它 它就会保留在那里 大概的概念 If default在滚动视图中添加类 active 因此 当您向下滚动时 它会在类进入视图时添加该类 在查看了类似的问
  • 模块化 AngularJS 应用程序:一个或多个 AngularJS 模块?

    我尝试使用 AngularJS 构建一个模块化应用程序 我的第一个想法是使用这种文件夹结构按功能对每个模块进行分组 core controllers js directives js app js modules users control
  • C++ 错误 C2040?

    错误信息 这是什么意思 我该如何解决它 错误 C2040 int 与 const char 2 的间接级别不同 Code include
  • 找不到方法 commandLine()

    我正在尝试将预构建 shell 脚本添加到我的 gradle Android Studio 构建中 我已添加以下内容app build gradle task prePreBuild lt lt commandLine ls preBuil
  • 根据列条件连接数据框行

    为了后续的讨论 我将参考下面的示例数据框 现在 我希望实现的是将所有相似的数据包时间分组 即所有 7s 12s 等 此外 PacketTime字段应包含最小值和最大值的差异 max PacketTime min PacketTime 以及F
  • Fortran90 数组将空白值读取为 null

    我正在读取外部文本文件的数据 30 行 7 列 每行用 分隔 我缺少表示为 的值 当我将数据读入二维数组时 缺失值被 0 00 替换 但数据中也有 0 00 值 当我计算平均值时 计数 项目数 n 显示为计数 缺失值的数量 我如何动态选择缺
  • 调试断言失败

    我不断遇到这种情况 Debug assertions failed 当我在调试模式下运行程序时出错 我尝试在 Visual C 网站上查找此错误 但这些解释对我来说太先进了 而且它们与我对问题的最佳猜测没有任何相似之处 我已经检查了我的代码
  • 使用 Java 查找句子中的确切单词

    我正在编写一个代码来识别文本中的国家 地区名称 我正在使用一本包含国家名称的字典India America Sri Lanka 我目前正在使用text contains key with key从字典中 然而 即使对于像这样的字符串 这也会
  • 在 C 语言中,stdout 缓冲区的大小是多少?

    今天我了解到 stdout 在设置为终端时是行缓冲的 并且在不同情况下是缓冲的 因此 在正常情况下 如果我使用 printf 而不终止 n 只有当缓冲区已满时 它才会打印在屏幕上 如何获得这个缓冲区的大小 它有多大 实际大小由各个实现定义
  • “SolidBrush”参数类型对于格式化属性“Foreground”无效。参数名称:值

    我尝试在调用方法中更改颜色文本 RichTextBox wpf 但我遇到了一些麻烦 我的麻烦是 SolidBrush 参数类型对于格式化属性 Foreground 无效 参数名称 值 My code MethodInvoker action
  • 如何从 2 个数组创建地图?

    我有一个字符串数组和一个整数数组 如何使用第一个作为键 第二个作为值来创建地图 val keys arrayOf butter milk apples val values arrayOf 5 10 42 val map Map
  • 滚动“返回顶部”链接时显示/隐藏 div

    我无法让我的 转到顶部 id arrow updiv 在打开时消失 例如页面顶部 在页面顶部我得到了 所以我想要arrow up div to visible show slow 当不在页面顶部时 var tmp window height
  • Spring中如何从WebRequest获取请求的URI?

    我正在使用以下方法处理 REST 异常 ControllerAdvice and ResponseEntityExceptionHandler在 Spring Rest Web 服务中 到目前为止 一切都工作正常 直到我决定添加URI路径