【问题标题】:Micronaut property injection to class members not working向班级成员注入 Micronaut 属性不起作用
【发布时间】:2019-01-09 23:44:16
【问题描述】:

我无法弄清楚我在以下 groovy 控制器中做错了什么。 未设置类成员 g2gApiKey2 和 g2gApiKey3 之前的 @Value 和 @Property 注释。 但是构造函数中的g2gk参数之前的@Value注解

我确实看到 @Property 在 groovy 中无法工作存在问题,但似乎已在我们正在使用的 micronaut 1.0.1 中修复。

否则端点已设置好并且可以正常工作。

    @Slf4j
    @Endpoint("translation")
    @Requires(property="g2g.apikey")
    class TranslationController {

        String g2gApiKey

        @Value('${g2g.apikey}')
        String g2gApiKey2

        @Property(name = "g2g.apikey")
        String g2gApiKey3

        TranslationController(@Value('${g2g.apikey}') String g2gk) {
            this.g2gApiKey = g2gk
        }

        @Write
        HttpResponse<Response> post (@Body Request req) {
            // Check for invalid request
            if (req.apiKey != g2gApiKey) return HttpResponse.unauthorized()

            Response rv = new Response()
            return HttpResponse.ok(rv)
        }
    }

这是属性来自的 application.yml:

g2g:
    apikey: abcd-1234

【问题讨论】:

  • 它在注入控制器的服务中工作,并在规范测试中工作。我需要为 Endpoint 做一些额外的事情吗?

标签: groovy annotations micronaut


【解决方案1】:

对于@Property注解,我们需要在application.properties文件中定义值。

我测试了它的工作原理。

  1. application.properties 中添加了这一行g2g.apikey: abcd-1234

  2. 在我的控制器中将其读取为

   @Property(name ='g2g.apikey')
    String apiKey

它对我有用。

【讨论】:

  • 奇怪,进行此更改并没有改变我所看到的行为。仍由 Requires 找到,但仅用作构造函数 arg,而不是在类参数中使用 Property 或 Value。
  • 更奇怪的是,只要我使用 MicronautTest(propertySources = "application.yml"),值和属性都可以在规范测试中工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多