如何在 Spring @RestController 中获取网络服务器的绝对路径?

How to get absolute webserver path in a Spring @RestController?

我希望我的 @RestController 到 return 到我的网络服务器的绝对 url 路径。但是该路径不应该是硬编码的,而是从运行 spring 应用程序的应用程序服务器派生的。

@RestController
public class FileService {
     @GetMapping("/list")
     public String getFiles(String key) {
            String filepath = manager.getFile(key);
            //TODO how to return the file with absolute path to webserver?
     }
}

此外,如果用户通过 http 请求文件,服务器应以 http 响应。同样,如果请求 https,则应在绝对 url.

之前添加 https 前缀

问题:如何动态获取控制器内部的绝对路径?

你可以从HttpServletRequest中提取它:

 @GetMapping("/list")
 public String getFiles(@RequestParam("key") String key, HttpServletRequest req) {
        String filepath = manager.getFile(key);
        String url = req.getScheme() + "://" + req.getServerName() + ":" + req.getServerPort() + req.getContextPath();
 }

使用来自 HttpServletRequest 的方法,您可以通过将其传递给控制器​​方法来获得这些方法:

@GetMapping("/list")
public String getFiles(@RequestParam("key") String key, HttpServletRequest request) {
     String serverAddress = String.format(
          "%s://%s:%d",
          request.geScheme(),
          request.getServerName(),
          request.getServerPort());
}