【问题标题】:Cannot get value in Controller using Spring无法使用 Spring 在 Controller 中获取值
【发布时间】:2022-01-19 19:03:33
【问题描述】:

我有一个如下所示的Controller,添加@Value("${code.url}") final String url后,我遇到以下错误:

无法解析值“${code.url}”中的占位符“code.url” 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean

问题明显与code.urlapplication.yml中的问题有关。


application.yml:

code:
   url: "https://www.gmail.com/"

控制者:

@RestController
@RequestMapping("/api/v1")
public class DemoController {

    private final DemoService demoService;
    private final Clock clock;
    private final String url;

    public DemoController(final DemoService demoService, final Clock clock,
                           @Value("${code.url}") final String url) {
        this.demoService = demoService;
        this.clock = clock;
        this.url = url;
    }

    //code omitted
}

我也尝试在控制器中使用@RequiredArgsConstructor,但没有任何意义。 那么,我该如何解决这个问题呢?

【问题讨论】:

  • 这真的是你的application.yml吗?
  • 查看文档docs.spring.io/spring-boot/docs/1.2.0.M1/reference/html/… 并相应地格式化您的 application.yml。
  • @JoãoDias 是的,application-local.yml,但我当然省略了其他部分。
  • @JorgeCampos 抱歉,没有显示我的代码,我的application.yml 中的缩进也没有问题。但问题还在继续。有什么想法吗?
  • application.yml 在您的项目中位于何处?

标签: java spring spring-boot yaml


【解决方案1】:

将您的代码更改为:

@RestController
@RequestMapping("/api/v1")
public class DemoController {

    private final DemoService demoService;
    private final Clock clock;
    @Value("${code.url}")
    private final String url;

    public DemoController(final DemoService demoService, 
                          final Clock clock) {
        this.demoService = demoService;
        this.clock = clock;
     }

    //code omitted
}

【讨论】:

  • 非常感谢您的宝贵帮助。我解决了这个问题,问候......投票了;)
  • 不客气!
【解决方案2】:

改变

code:
url: "https://www.gmail.com/"

code:
  url: "https://www.gmail.com/"

另外,请确保相应 yml 文件的位置和可用性 例如:

【讨论】:

  • 对不起,SO没有显示我的代码,我的application.yml中的缩进也没有问题。但问题还在继续。有什么想法吗?
  • 问题与application.yml的位置无关,因为一切正常。
  • 非常感谢您的宝贵帮助。我解决了这个问题,问候......投票了;)
【解决方案3】:

你需要正确缩进yaml:

code:
   url: "https://www.gmail.com/"

否则url 处于最高级别,属性将是url 而不是code.url

【讨论】:

  • 对不起,SO没有显示我的代码,我的application.yml中的缩进也没有问题。但问题还在继续。有什么想法吗?
  • 非常感谢您的宝贵帮助。我解决了这个问题,问候...
  • 问题/解决方案是什么?
  • 我将相同的值添加到 test 文件夹的application.yml
  • 也许你想了解spring profiles。这将帮助您减少重复。所以你有一个application.properties 在你的src/main/resources 和一个src/test/application-test.yml 只包含那些需要为你的测试不同的值。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-21
相关资源
最近更新 更多