有没有一种方法可以在Spring从外部属性文件中读取文本而无需使用@Value注释。例如:application.properties
@Value
var.foo="hello"
我可以用
@Value("${var.foo}") String value;
作为类变量。有没有办法在不使用@Value注释的情况下包括此属性。诸如JSR bean验证的方式。
@NotNull(message={custom.notnull})
并在 ValidationMessages.properties 文件中将此属性值外部化。
例如,如果我有一个resource(web component)类,并且必须使用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知道默认情况下可以选择(或可以配置)这些消息。
Swagger是否提供这种选择?如果没有,如何设置一个?
潜在的问题是,我不想使用与文档相关的数据(元数据)使代码/逻辑混乱。
我认为除非您使用的批注的基础实现或者具有其自己的i18n标准(如ValidationMessages.properties)或支持Spring的标准,否则您无法实现这一目标MessageSource。
ValidationMessages.properties
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。