我正在Spring MVC控制器中构建一个新的URL,以传递回客户端。目前我正在尝试这个:
// httpRequest is the current HttpServletRequest
new URL(httpRequest.getProtocol(),
httpRequest.getServerName(),
httpRequest.getServerPort(),
httpRequest.getContextPath().concat("/foo/bar.html"));
问题是httpRequest.getProtocol()
给了我“HTTP / 1.1”而不仅仅是“HTTP”。我可以修剪但是想知道是否有更优雅的方式。
答案 0 :(得分:9)
协议是HTTP / 1.1,因为它是HTTP的特定版本。 ServletRequest#getScheme
本身给出的方案是http
:
new URL(httpRequest.getScheme(),
httpRequest.getServerName(),
httpRequest.getServerPort(),
httpRequest.getContextPath().concat("/foo/bar.html"));
答案 1 :(得分:0)
在2020年,我建议您使用ServletUriComponentsBuilder
,它是静态方法,例如ServletUriComponentsBuilder#fromCurrentRequest
,可帮助您使用上一个请求构建URL。
示例:
URL url = ServletUriComponentsBuilder
.fromCurrentRequest()
.path("/foo/bar.html")
.encode() // To encode your url... always usefull
.build()
.toUri()
.toURL()
此外,如果您想在同一应用程序上进行重定向,请仅返回状态为302的“ redirect:/foo/bar.html”,Spring Boot MVC会将其转换为常规重定向。
示例:
@ResponseBody
@GetMapping("/some/endpoint")
@ResponseStatus(HttpStatus.FOUND)
public ModelAndView redirectToFoo() {
return new ModelAndView("redirect:/foo/bar.html");
}