Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot将Java注释上的配置属性/消息外部化_Java_Spring_Properties_Spring Boot_Annotations - Fatal编程技术网

Spring boot将Java注释上的配置属性/消息外部化

Spring boot将Java注释上的配置属性/消息外部化,java,spring,properties,spring-boot,annotations,Java,Spring,Properties,Spring Boot,Annotations,是否有一种方法可以在spring中从外部属性文件中读取文本,而无需使用@Value注释。例如:application.properties var.foo="hello" 我可以使用 @Value("${var.foo}") String value; 作为类变量。是否有一种方法可以在不使用@Value注释的情况下包含此属性。类似于JSRBean验证的功能 @NotNull(message={custom.notnull}) 您可以在ValidationMessages.propertie

是否有一种方法可以在spring中从外部属性文件中读取文本,而无需使用
@Value
注释。例如:application.properties

var.foo="hello"
我可以使用

@Value("${var.foo}") String value;
作为类变量。是否有一种方法可以在不使用
@Value
注释的情况下包含此属性。类似于JSRBean验证的功能

@NotNull(message={custom.notnull})
您可以在ValidationMessages.properties文件中将此属性值外部化

例如,如果我有一个资源(web组件)类,并且如果我必须使用Swagger注释来记录它们

@controller
@path("/")
@Api(description = "User Resource API")
public class UserResource {

    @Path("/users")
    @GET
    @Produces(MediaType.APPLICATION_JSON)
    @ApiOperation(value = "returns user details", notes = "some notes")
    public User getUser() {

        return new User(123, "Joe", "Montana");
    }
}
模型呢,

@ApiModel("user model")
public class User {

    @ApiModelProperty(value = "This represents user id")
    private String id;
    private String firstName;
    private String lastName;
    ...
}
如何将此字符串/句子/消息外部化为外部属性文件。我认为这适用于一般的Java注释和spring,而不是特定于Swagger。我指定Swagger的原因是,就像hibernate验证一样,Java库可以选择在外部ValidationMessages.properties文件中指定这些消息,并且spring默认知道如何获取(或者可以进行配置)

斯威格提供了这样的选择吗?如果没有,如何设置


潜在的问题是,我不想让我的代码/逻辑与文档相关的数据(元数据)混杂在一起。

我不认为你能做到这一点,除非你正在使用的注释的底层实现都有自己的i18n标准(比如
ValidationMessages.properties
),或支持Spring的
MessageSource

对于后一种选择,您只需在
messages.properties
文件中添加键/值对,然后让框架完成其余工作:

消息.属性

my.validation.error.message=出现严重错误!
SomeClass.java

@MySpringCompatibleValidationAnnotation("my.validation.error.message")
private String someVariable;
底线是,根据您尝试使用的框架,它可能支持也可能不支持开箱即用

现在,就斯威格而言,i18n对文档的支持是作为一项新功能提出的,但在他们进一步考虑如何实现时,它被关闭或搁置。有关更多详细信息,请参阅。

使用
@Value(${property}”)
注释来注入配置属性有时会很麻烦,因此spring boot引入了
@ConfigurationProperties
,这应该是您想要的解决方案


是引用文档。

在配置文件中声明bean时,可以使用占位符。这里可以尝试一个示例:

如果您使用的是Spring Boot,则可以尝试此方法,而无需进行任何特殊配置

@environment.getProperty('property')

您需要提供有关用例的更多详细信息,以了解为什么不能或不想使用
@Value
注释。Spring围绕i18n支持的另一个领域是使用messages.properties允许某些领域使用特定语言的text.hi@shawn.替换令牌。。谢谢你的回复。让我编辑这个问题谢谢托马斯的回答。。我觉得没有将各种注释属性的值外部化的大摇大摆的注释会给代码(模型、资源…)带来太多的混乱。