为了账号安全,请及时绑定邮箱和手机立即绑定

如何初始化 MessageSource 以注入控制器?

如何初始化 MessageSource 以注入控制器?

慕侠2389804 2023-06-14 15:41:54
我搜索了互联网的大部分,但没有找到明确的答案......我想做一件简单的事情:就像在 Grails 中一样,有一个单例MessageSource类型可以在控制器中使用它来显示 i18n 消息。我想messageSource从这个文件初始化我的:src/main/resources/my/package/i18n/Messages*.propertiestest=FooBar初始化尝试:class AppConfig {  @Singleton  MessageSource messageSource() {    new ResourceBundleMessageSource( 'my.package.i18n.Messages' )  }}要注入的控制器:class CRUDController<T> {  @Inject  MessageSource messageSource  @Transactional( readOnly=true )  @Get( '/' )  Map<String,Object> list() {    log.info "$messageSource -> ${messageSource.getMessage( 'test', MessageSource.MessageContext.DEFAULT )}"    [:]  }}日志信息打印如下:io.micronaut.runtime.context.CompositeMessageSource@79a1d030 -> Optional.empty因此, messageSource 以某种方式(和某处)被错误初始化。做这个简单的事情最简单直接的方法是什么?
查看完整描述

1 回答

?
紫衣仙女

TA贡献1839条经验 获得超15个赞

请参阅https://github.com/jeffbrown/injecteermessagesource上的项目。


https://github.com/jeffbrown/injecteermessagesource/blob/beba0773d41cb475d8d837acc19d0dd41f5b4431/src/main/groovy/injecteermessagesource/CRUDController.groovy


package injecteermessagesource


import io.micronaut.context.MessageSource


import javax.inject.Inject


class CRUDController<T> {


    protected final Class<T> clazz


    @Inject

    MessageSource messageSource


    protected CRUDController( Class<T> clazz ) {

        this.clazz = clazz

    }


}

https://github.com/jeffbrown/injecteermessagesource/blob/471f6436511c99511426094a8c269112e93149e6/src/main/groovy/injecteermessagesource/PersonController.groovy


package injecteermessagesource


import io.micronaut.context.MessageSource

import io.micronaut.http.annotation.Controller

import io.micronaut.http.annotation.Get


@Controller('/people')

class PersonController  extends CRUDController<Person> {

    protected PersonController() {

        super(Person)

    }


    @Get('/')

    String index() {

        def context = MessageSource.MessageContext.DEFAULT

        def message = messageSource.getMessage('test', context)

        message.get()

    }

}

https://github.com/jeffbrown/injecteermessagesource/blob/471f6436511c99511426094a8c269112e93149e6/src/main/groovy/injecteermessagesource/AppConfig.groovy


package injecteermessagesource


import io.micronaut.context.MessageSource

import io.micronaut.context.annotation.Bean

import io.micronaut.context.annotation.Factory

import io.micronaut.context.i18n.ResourceBundleMessageSource


@Factory

class AppConfig {


    @Bean

    MessageSource messageSource() {

        new ResourceBundleMessageSource('my.somepackage.i18n.Messages')

    }

}

https://github.com/jeffbrown/injecteermessagesource/blob/471f6436511c99511426094a8c269112e93149e6/src/main/resources/my/somepackage/i18n/Messages.properties


test=FooBar

这一切似乎都有效:


$ curl localhost:8080/people

FooBar


查看完整回答
反对 回复 2023-06-14
  • 1 回答
  • 0 关注
  • 119 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信