2017-05-29 1 views
1

私は、開発環境と本番環境用のコントローラの異なるマッピングルートを使用したいと思います。私は@ConditionalOnExpressionでこれを試してみましたが、条件がfalseの場合、それは同様@RequestMapping注釈を削除するようだ:春のアクティブプロファイルに応じてマッピングルートを変更します

@RestController 
@RequestMapping(value = "/dev") 
@ConditionalOnExpression("#{environment.getActiveProfiles()[0] == 'DEV'}") 
public class CheckoutController { 

私はすべてのマッピングルートに接頭辞「は/ dev」を追加したい場合は、アクティブなプロファイルDEVです。

答えて

2

2つの異なるコントローラを作成することをお勧めします。自分のプロファイルのそれぞれが

@RestController 
@RequestMapping(value = "/dev") 
@ConditionalOnExpression("#{environment.getActiveProfiles()[0] == 'DEV'}") 
public class DevCheckoutController { 

@RestController 
@RequestMapping(value = "/prod") 
@ConditionalOnExpression("#{environment.getActiveProfiles()[0] == 'PROD'}") 
public class ProdCheckoutController { 

別の(より複雑な)方法RequestMappingHandlerMappingをオーバーライドすることです。メソッドが必要です。

protected RequestMappingInfo createRequestMappingInfo(
     RequestMapping requestMapping, RequestCondition<?> customCondition) { 

    return RequestMappingInfo 
      .paths(resolveEmbeddedValuesInPatterns(requestMapping.path())) 
      .methods(requestMapping.method()) 
      .params(requestMapping.params()) 
      .headers(requestMapping.headers()) 
      .consumes(requestMapping.consumes()) 
      .produces(requestMapping.produces()) 
      .mappingName(requestMapping.name()) 
      .customCondition(customCondition) 
      .options(this.config) 
      .build(); 
} 

.paths(resolveEmbeddedValuesInPatterns(requestMapping.path()))には、プロファイルに応じた値を追加するだけです。だから、環境

@Autowired 
Environment env; 

を追加し、この方法は、もう一つの方法は、あなたのマッピングだけで表現

@RequestMapping(value = "/${my.profile.property:}prod") 

とDEVプロファイルのためだけの定義を追加することで、この

String prefix = "DEV".equals(env.getActiveProfiles()[0]) ? "DEV" : "" 
return RequestMappingInfo 
      .paths(prefix + resolveEmbeddedValuesInPatterns(requestMapping.path())) 

ようにする必要がありますプロパティー

my.profile.property=DEV 
+0

メモth 'resolveEmbeddedValuesInPatterns(requestMapping.path())'は配列を返しますので、最初の項目にアクセスして接頭辞: '.paths(接頭辞+ resolveEmbeddedValuesInPatterns(requestMapping.path())[]を追加する必要があります。 – angeldev

+0

私は配列のすべての項目にプレフィックスを追加する必要があると言います。同じコントローラメソッドを指す複数のマッピングがある場合は、すべてのマッピングを適応させる必要があります。 – StanislavL

関連する問題