gpt4 book ai didi

java - Spring Boot获取浏览器请求URL

转载 作者:行者123 更新时间:2023-11-30 06:13:04 25 4
gpt4 key购买 nike

我有一个简单的休息 Controller 来捕获错误。我想获取浏览器发送到服务器的实际 URL,但 servlet 给了我一个不同的 URL。

如果我导航到 127.0.0.1/abc ,则会触发 404 错误,并将其路由到定义的 /error 处理程序。但是,输出给出的结果是 127.0.0.1/error 而不是 127.0.0.1/abc。如何获取原始URL?

@RestController
public class IndexController implements ErrorController {

@RequestMapping("/")
public String index() {
return "OK";
}

@RequestMapping("/error")
public String error(HttpServletRequest request) {
System.out.println("ERR: " + request.getRequestURL() + " : " + request.getRequestURI());
return "ERR";
}

@Override
public String getErrorPath() {
return "/error";
}
}

最佳答案

您可以定义自己的 @ExceptionHandler,它将在由 /error 映射处理之前将原始请求 URI 作为请求的属性保存:

@ExceptionHandler(Exception.class)
public void handleException(HttpServletRequest req, HttpServletResponse resp) throws Exception {
req.setAttribute("originalUri", req.getRequestURI());
req.getRequestDispatcher("/error").forward(req, resp);
}

然后在您使用的任何 /error 映射实现中读取新的 originalUri 属性:

@RequestMapping("/error")
public String error(HttpServletRequest request) {
System.out.println("ERR: " + request.getAttribute("originalUri"));
return "ERR";
}

您还可以尝试扩展 Spring MVC 中可用的其他错误处理类来添加此行为,例如ResponseEntityExceptionHandler 。请注意,我的示例中的 forward() 可能被认为是肤浅的,因为可以从 @ExceptionHandler 返回 ResponseEntity

关于java - Spring Boot获取浏览器请求URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49825438/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com