2017-06-08 11 views
0

私のコントローラにはこのようなコードがあります。Spring MVCのリクエストのURIにPathVariableがマッピングされているかどうかをチェックする方法は?

@RequestMapping(value = "/{scene}/{function}/**") 
    public void processProxyCall(@PathVariable("scene") final String scene, @PathVariable("function") final String function, 
     final HttpServletRequest request,final HttpServletResponse response) throws IOException { 
    ... 
} 

{scene}の可能な値が "sit"または "uat"のテスト段階です。また、この変数をフェーズで処理する追加のロジックがあります。 このようなURI "/ sit/student/add"にはうってつけです。場面は座っており、その機能は学生です。

しかし、実際には、 "sit"も "uat"もありません。この場合のURIは "/ student/add"になります。シーン変数も処理する必要はありません。

質問は上記のコードスニペットのPathVariable "シーン"に対して何らかの検査を行う方法です。制作の場合、シーンは自動的に「学生」にマップされますが、それはひどく間違っています。

私は以下のように別のRequestMappingを追加してプロダクションケースを処理しようとしていましたが、変更は一切ありません。しかし、404 ...

@RequestMapping(value = "/{function}/**") 
    public void processProxyCall(@PathVariable("function") final String function, final HttpServletRequest request, 
      final HttpServletResponse response) throws IOException { 
} 
+0

をあなたは電話を傍受するアスペクトまたはインターセプタを使用して考えていプロフィール(環境)に基づいて必要な点検を行います – pvpkiran

答えて

0
@RequestMapping(value = {"/{scene}/{function}/**", "/{function}/**"}) 
public void processProxyCall(@PathVariable(value="scene", required=false) final String scene, @PathVariable("function") final String function, 
     final HttpServletRequest request,final HttpServletResponse response) throws IOException { 
    ... 
} 

は、複数のマッピングを定義し、sceneパス変数required=false

UPDATE作りました:

@RequestMapping(value = "/{scene}/{function}/**") 
public void processProxyCall(@PathVariable(value="scene", required=false) final String scene, @PathVariable("function") final String function, 
     final HttpServletRequest request,final HttpServletResponse response) throws IOException { 
    ... 
} 

@RequestMapping(value = "/{function}/**") 
public void processProxyCallShort(@PathVariable(value="scene", required=false) final String scene, @PathVariable("function") final String function, 
     final HttpServletRequest request,final HttpServletResponse response) throws IOException { 
    processProxyCall(null, function, request, response); 
} 
+0

これは春4の後にしか利用できないと思います、そうですか?私のプロジェクトはまだSpring 3.1.2とjava1.7を使用しているので、required = falseが表示されません。 –

+0

Ok、次に 'scene'パラメータ(2つの異なるrequestmappins)の有無にかかわらず2つの異なるメソッドを定義し、別のnullを渡すから – StanislavL

+0

私は別の渡すnull 'から1つのメソッドを呼び出すことを意味するか分からない、いくつかのコードを表示してくださいできますか? –

関連する問題