根据您使用的配置/实现/spring 版本,您有很多选择。
我在下面提到的第一个选项可能最适合您的需求。
第一个选项
创建一个方法并将请求作为参数传递。您不需要使用 StringBuilder(样板代码),但如果您愿意/需要,您可以使用。
public String makeUrl(HttpServletRequest request, String param, String value) {
return request.getRequestURL().toString() + "&" + param + "=" + value;
}
第二个选项
要获取当前 URL,您还可以使用绑定到当前线程的请求
((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()
添加
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
到 web.xml 文件/通过在 Spring Boot 中使用合适的注释。
第三个选项
您可以使用 ServletUriComponentsBuilder/UriComponentsBuilder 并使用以下文档中的方法构建新 URL。
你的例子:
public String makeUrl(HttpServletRequest request, String param, String value) {
ServletUriComponentsBuilder builder = ServletUriComponentsBuilder.fromCurrentRequestUri();
builder.queryParam(param, value);
URI uri = builder.build().toUri();
return uri.toString();
}
文档:
ServletUriComponentsBuilder
UriComponentsBuilder