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

Spring Hateoas 2创建linkTo时依赖注入失效致空指针问题

问题原因

linkTo(methodOn(SearchController.class).one(plugin.getName())) 中的methodOn会生成一个动态代理的控制器对象,这个对象并非Spring容器中已完成依赖注入的真实实例——它的唯一作用是模拟方法调用,以此解析对应的请求映射路径。

当你在这个代理对象的one方法调用中触发了需要访问this.plugins的逻辑时,代理对象里的plugins字段并没有被Spring注入,自然会抛出空指针异常。

解决方案

核心思路是:避免让methodOn生成的代理对象执行任何依赖Spring注入的业务代码,仅用它来提取URL映射信息。

  • 方案1:提前提取参数,避免触发依赖逻辑(推荐)
    把需要传入的参数提前计算好,再传递给methodOn的方法调用,这样不会触发代理对象内部的业务逻辑:

    // 提前从真实业务对象中获取参数
    String targetPluginName = plugin.getName();
    // 仅传递参数,代理对象的one方法不会执行真实逻辑
    Link selfLink = linkTo(methodOn(SearchController.class).one(targetPluginName)).withSelfRel();
    
  • 方案2:直接使用linkTo重载方法(类型不安全,不推荐)
    跳过methodOn,直接指定控制器类、方法名和参数构建链接:

    Link selfLink = linkTo(SearchController.class, "one", plugin.getName()).withSelfRel();
    
关键注意点

Spring Hateoas的methodOn设计初衷只是通过类型安全的方式解析请求路径,并非执行方法的真实逻辑。使用时不要在methodOn触发的方法调用中包含任何依赖Spring注入资源的操作,否则必然会出现依赖未注入的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 04:18:20