2016-08-23 17 views
11

@Valueアノテーションを使用しないで、春に外部プロパティファイルからテキストを読み取る方法はありますか?例:私はクラス変数としてSpringブートでJavaアノテーションの設定プロパティ/メッセージを外部化

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

を用いてばね豆の中に注入することができる

var.foo="hello" 

をapplication.properties。 @Valueアノテーションを使用せずにこのプロパティを含める方法はありますか? JSR Beanの検証がどのように行われるかのようなもの。

@NotNull(message={custom.notnull}) 

、あなたはValidationMessages.propertiesファイルでこのプロパティの値を外部化。

例、私はリソース(Webコンポーネント)クラスを持っている場合、私はそれらを文書化する闊歩注釈を使用する必要がある場合は、

@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の注釈や春に適用され、Swagger特有のものではないと思います。私がSwaggerを指定したのは、外部ライブラリのValidationMessages.propertiesファイルでこれらのメッセージを指定するオプションがあり、Springがデフォルトでそれを取得する(または設定できる)ことです。

スワッガーはこのようなオプションを提供していますか?そうでない場合は、どうすればセットアップできますか?

根本的な問題は、ドキュメント関連のデータ(メタデータ)を使用してコード/ロジックを混乱させたくないということです。

+0

あなたは '@ Value'アノテーションを使用できない、またはしたくない理由について、ユースケースについて詳しく説明する必要があります。 messages.propertiesを使用して特定の領域でトークンの置換を言語固有のテキストで利用できるようにするi18nサポートの周りにはSpringの他の領域があります。 –

+0

こんにちは@shawn ..ご回答いただきありがとうございます。私はこの質問を編集させてください – Bharath

答えて

6

あなたが使用しているアノテーションの基礎となる実装がi18n(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

返信のためにThomasに感謝します。私はさまざまなアノテーションプロパティの値を外部化することなくSwaggerアノテーションを感じると、コード(モデル、リソース...)にあまりにも混乱を加えます。 – Bharath

2

@Value("${property}")注釈を使用して設定プロパティを挿入すると、煩わしいことがあります。そのため、春のブートで@ConfigurationPropertiesが導入されました。

Hereは参考文書です。

関連する問題