【问题标题】:Log url to Spring controller from inside it从内部将 url 记录到 Spring 控制器
【发布时间】:2020-08-14 12:44:49
【问题描述】:

假设你有一个 Spring MVC 控制器,类似这样的

@Controller
public class RestController {
 
    @GetMapping(value = "/test")
    public @ResponseBody Test getTestData(...) {

        // console log path to controller: http://localhost:80/app/test
        return testData;
    }
}

是否可以从控制器内部记录/打印到它的 url?在上面的示例中,输出类似于https://localhost:80/app/test

使用 servlet 中的 .getRequestUrl 行为不正确。

【问题讨论】:

  • "使用 servlet 中的 .getRequestUrl 行为不正确。" - 实际和预期的输出是什么?
  • 不确定,你要实现什么,你可以从请求中获取服务器ip,你应该知道应用程序/上下文名称,你知道调用的api,为什么不能创建所需的网址
  • 您可以将常量作为注释值传递。你可以基于几个常量来构造 URL,比如 (domain + restBasePath + instancePath(subPath))... Spring 无法决定你的绝对路径,你应该比它更了解相对路径。
  • @Turing85 和.getRequestUrl 我得到了到类似http://localhost:80/WEB-INF/view/.../test.jsp 的jsp 的链接,这不是我想要的。我想要控制器的链接。
  • 您的控制器在示例代码中没有设置任何路径... getMapping 本身有一个映射...

标签: java spring model-view-controller


【解决方案1】:

您可以将 UriComponentsBuilder 作为参数注入,然后使用 toUriString() 方法。从文档中,它用于从当前请求构建一个相对 URI,这应该可以按照您的预期工作Doc

@Controller
public class RestController {
...
    @GetMapping(value = "/test")
    public @ResponseBody Test getTestData(UriComponentsBuilder ucb, ...) {
        LOGGER.debug(ucb.toUriString());
        // console log path to controller: http://localhost:80/app/test
        return testData;
    }
...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多