2016-08-23 61 views
11

有没有方法可以在不使用@Value注释的情况下从外部属性文件中读取文本。例如:为application.propertiesSpring引导将Java注释中的配置属性/消息外部化

var.foo="hello" 

我可以在一个Spring bean使用

@Value("${var.foo}") String value; 

为类变量注入它。有没有办法在不使用@Value注释的情况下包含此属性。就像JSR bean验证一样。

@NotNull(message={custom.notnull}) 

,你在外部化ValidationMessages.properties文件该属性值。

例如,如果我有一个资源(网络组件)类,如果我不得不使用扬鞭注释记录他们,

@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默认会选择它(或可以配置)。

Swagger是否提供这样的选项?如果没有,我如何设置一个?

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

+0

您需要提供关于您的用例的更多细节,以了解为什么您不能或不想使用'@ Value'注释。 Spring的其他领域围绕i18n支持,它使用messages.properties来允许某些区域利用语言特定的文本来替换令牌。 –

+0

嗨@shawn ..感谢您的回复。让我编辑这个问题 – Bharath

回答

6

我不认为你可以做到这一点,除非你使用的注释的底层实现要么带有他们自己的国际标准(如ValidationMessages.properties),要么支持Spring的MessageSource

在后一种情况下,你应该做的是添加键/值对的messages.properties文件中,并让框架做休息:

messages.properties

my.validation.error.message=Something went terribly wrong! 

SomeClass.java

@MySpringCompatibleValidationAnnotation("my.validation.error.message") 
private String someVariable; 

底线是,根据您尝试使用的框架,它可能支持或不支持这种开箱即用。

现在,就Swagger而言,i18n对文档的支持被​​提出作为一项新功能,但它被关闭或暂停,同时他们对如何实现应用进行了更多的思考。有关更多详细信息,请参阅https://github.com/OAI/OpenAPI-Specification/issues/274

+0

感谢托马斯的答复..我觉得Swagger注释没有外部化各种注释属性的值增加了太多混乱的代码(模型,资源...)。 – Bharath

2

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

Here是参考文档。

-2

,没有做任何特殊配置

@environment.getProperty('property') 
相关问题