異なる引数を使用して同じURLパターンに対して2つのメソッドを作成します


93

1つのURL「serachUser」に2つの異なる値(リクエストパラメータ)userIdまたはUserNameが含まれるシナリオがあります。

そのため、2つのメソッドを作成しました

public String searchUserById(@RequestParam long userID, Model model) 
public ModelAndView searchUserByName(@RequestParam String userName)

しかし、あいまいなマッピングで例外が見つかりました。Springにはこの状況に対処する方法があります。

回答:


197

このparamsパラメーターを使用して、HTTPパラメーターでフィルター処理できます。あなたの場合、それは次のようになります:

@RequestMapping(value = "/searchUser", params = "userID")
public String searchUserById(@RequestParam long userID, Model model) {
  // ...
}

@RequestMapping(value = "/searchUser", params = "userName")
public ModelAndView searchUserByName(@RequestParam String userName) {
  // ...
}

私がこれを処理したもう1つの方法は、パラメーターを文字列として受け入れ、それに対してLong.parseLong()を呼び出すことです。解析する場合はuserId、解析しない場合はuseridと見なします。
codeChimp 2013

9
複数のparams = { "storeId", "containerLabel" }
パラメータ

URLマッピングと他のすべてのパラメーターが同じである場合、デプロイメント時間の例外が発生しますか?
Janath 2016

しかし、承認するためにこのURLに異なる役割/機能を割り当てることは可能ですか?
Kanagavelu Sugumar 2017年

2
関連:Swaggerはこれを完全にはサポートしていない可能性があります。この問題はgithub.com/springfox/springfox/issues/1828で見つかりました。私はショーの代わりに2の1つの方法どうやらこれがで固定することができ春フォックス2.7.0と闊歩UIを使用enableUrlTemplating(true):と実験闊歩UIを使用してspringfox.github.io/springfox/docs/current/...
ステファニー

0

リクエストパラメータがnullの場合は、値を渡さないとnullになり、次のようにコードを記述できます。

@RequestMapping(value = "/searchUser", params = {"userID","userName"})
public String searchUserById(@RequestParam long userID,@RequestParam String 
userName, 
Model model) {    
if(userID != null){
//..
}else{
// ...
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.