You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.2升级后Spring HATEOAS 1.0中BaseUriLinkBuilder移除的修复咨询

修复Spring Boot 2.2升级后BaseUriLinkBuilder不存在的问题

嘿,这个问题我升级Spring Boot到2.2版本时也踩过坑!Spring HATEOAS 1.0(正好和Spring Boot 2.2配套)重构了API,BaseUriLinkBuilder确实被移除了,官方把它的功能整合到了WebMvcLinkBuilder里,下面给你具体的修复方案:

核心变更说明

Spring HATEOAS 1.0为了简化API设计,将基础URI的构建能力合并到了WebMvcLinkBuilder的静态方法baseUri()中,不再需要单独的BaseUriLinkBuilder类,这是你找不到它的原因。

改造你的工具类

你原来的代码逻辑是拼接origin、上下文路径、REST基础路径和后缀URI,我们可以用UriComponentsBuilder先构建完整的基础URI,再通过WebMvcLinkBuilder.baseUri()替代原来的BaseUriLinkBuilder.create()逻辑,改造后的代码如下:

/**
 * Utility class that fix the URI created adding the base path.
 * {@linkplain "https://github.com/spring-projects/spring-hateoas/issues/434}"
 *
 * @author Daniele Renda
 */
@Service
@Log4j2
public class BasePathAwareLinks {

    private final URI contextBaseURI;
    private final URI restBaseURI;

    @Autowired
    public BasePathAwareLinks(ServletContext servletContext, RepositoryRestConfiguration config) {
        contextBaseURI = URI.create(servletContext.getContextPath());
        restBaseURI = config.getBasePath();
    }

    public WebMvcLinkBuilder underBasePath(WebMvcLinkBuilder linkBuilder) {
        try {
            URI uri = linkBuilder.toUri();
            URI origin = new URI(uri.getScheme(), uri.getAuthority(), null, null, null);
            URI suffix = new URI(null, null, uri.getPath(), uri.getQuery(), uri.getFragment());

            // 构建完整的基础URI:origin + contextBaseURI + restBaseURI
            UriComponents baseUriComponents = UriComponentsBuilder.fromUri(origin)
                    .path(contextBaseURI.getPath())
                    .path(restBaseURI.getPath())
                    .build();

            // 使用WebMvcLinkBuilder.baseUri替代BaseUriLinkBuilder.create
            return WebMvcLinkBuilder.baseUri(baseUriComponents.toUri())
                    .slash(suffix);
        } catch (URISyntaxException e) {
            log.error("Failed to build base path aware link", e);
        }
        return null;
    }
}

额外注意点

  • UriComponentsBuilder会自动处理路径中的斜杠重复问题,不用担心拼接时出现//这类错误路径;
  • 如果你的restBaseURI是空路径,UriComponentsBuilder也会自动忽略,不会影响最终结果;
  • 如果你需要更灵活的路径拼接,也可以直接使用UriComponentsBuilder构建完整URI后,再转换成WebMvcLinkBuilder。

内容的提问来源于stack exchange,提问作者drenda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:19:51