2016-04-09 13 views
0

私はUser APIを作成しています。ログインする前にgetUserByEmail()を呼び出そうとしています。私の問題は、HTTPパスERRORのためにマッピングされたあいまいなハンドラメソッドを取得することです。春同じURLですがパラメータのタイプが異なる

{ "タイムスタンプ"::1460226184275、 "ステータス":500、 "エラー": "内部サーバーエラー"、 "例外": "java.langでここ

@RequestMapping(value = "/user/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<User> getUser(@PathVariable("id") int id) { 
    System.out.println("Fetching User with id " + id); 
    User user = userService.findById(id); 
    if (user == null) { 
     System.out.println("User with id " + id + " not found"); 
     return new ResponseEntity<User>(HttpStatus.NOT_FOUND); 
    } 
    return new ResponseEntity<User>(user, HttpStatus.OK); 
} 

@RequestMapping(value = "/user/{email}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<User> getUserByEmail(@PathVariable("email") String email) { 
    System.out.println("Fetching User with email " + email); 
    User user = userService.findByEmail(email); 
    if (user == null) { 
     System.out.println("User with email " + email + " not found"); 
     return new ResponseEntity<User>(HttpStatus.NOT_FOUND); 
    } 
    return new ResponseEntity<User>(user, HttpStatus.OK); 
} 

は私が取得エラー応答であります.IllegalStateException "、" message ":" HTTPパス 'http://localhost:8080/user/fr'にマッピングされたあいまいなハンドラメソッド:{public org .springframework.http.ResponseEntity com.ffa.controllers.UserController.getUser(int)、public org.springframework .http。 ResponseEntity com.ffa.controllers.UserController.getUserByEmail(java.lang.String)} "、" path ":"/user /fr "}

私の問題は、私はGETが同じであるが、異なるパラメータタイプを持っている私と関係があることを知っている。どんな助けでも大歓迎です!

+1

マッピング方法を組み合わせて、あなたのIDまたは電子メールアドレスに応じて使用をフェッチするロジックを用意してください – LearningPhase

+1

現在、あなたのロジック/ユーザ/によると、それがidの電子メールかどうかはわかりません。どちらかが/ user/emailを持っていますか? Email = and/user/id?id = id – LearningPhase

+0

@LearningPhase私はそれらを別々にしたいと思います。どちらを使用するかを知るためにこれをどのように変更しますか? – alcol92

答えて

0

PathVariablesではなく、2つの異なるURLでRequestParamsを使用できます。

@RequestMapping(value = "/user", params="userID", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) 
public ResponseEntity<User> getUser(@RequestParam("userID") int id) { 
    System.out.println("Fetching User with id " + id); 
    User user = userService.findById(id); 
    if (user == null) { 
     System.out.println("User with id " + id + " not found"); 
     return new ResponseEntity<User>(HttpStatus.NOT_FOUND); 
    } 
    return new ResponseEntity<User>(user, HttpStatus.OK); 
} 

@RequestMapping(value = "/user", params="emailID, method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE") 
public ResponseEntity<User> getUserByEmail(@RequestParam("emailID") String email) { 
    System.out.println("Fetching User with email " + email); 
    User user = userService.findByEmail(email); 
    if (user == null) { 
     System.out.println("User with email " + email + " not found"); 
     return new ResponseEntity<User>(HttpStatus.NOT_FOUND); 
    } 
    return new ResponseEntity<User>(user, HttpStatus.OK); 
} 

あなたが/user?userID=123を呼び出すとき、それは最初のものを起動すると、あなたが/[email protected]を呼び出すときは、第2 1を呼び出します。これは、@RequestMappingに渡されるparamsプロパティによって注意が払われます。

関連する問題