0

私が開発している REST-API では、さまざまな種類のユーザー データにアクセスできます。

ユーザーは、ID、電子メール、またはユーザー名で識別できます。ユーザーは、注文などの他のデータをいくつか持っています。

現在、次のエンドポイントを公開する予定です。

  • /rest/user/byemail/test@example.org/profile
  • /rest/user/byemail/test@example.org/orders
  • /rest/user/byemail/test@example.org/address
  • /rest/user/byid/123456/profile
  • /残り/ユーザー/byid/123456/注文
  • /残り/ユーザー/byid/123456/アドレス
  • /残り/ユーザー/ユーザー名/テスト/プロファイル
  • /rest/user/byusername/test/orders
  • /rest/user/byusername/test/アドレス

ご覧のとおり、URL は常に 2 つの「部分」で構成されています。1 つはユーザーを識別するためのもので、もう 1 つはリソースを識別するためのものです。

コントローラーに 9 つの異なるメソッドを記述することを回避できれば素晴らしいことです (将来、他の種類の情報が存在する可能性があるため)。

UserControllerによって返され、パラメータ化されるものを書くことは何とか可能MainControllerですか?

public class UserController {
   @RequestMapping("/profile")
   public ModelAndView profile(User user) {
      //...
   }
   @RequestMapping("/orders")
   public ModelAndView profile(User user) {
      //...
   }
   @RequestMapping("/address")
   public ModelAndView profile(User user) {
      //...
   }
}

@RequestMapping("/rest/user")
public class MainController {
   @RequestMapping("byemail/{email}")
   public ??? byEmail(@PathVariable String email) {
       User user = //Find user by email
       //???
   }
   @RequestMapping("byusername/{username}")
   public ??? byUserName(@PathVariable String username) {
       User user = //Find user by username
       //???
   }
   @RequestMapping("byid/{id}")
   public ??? byId(@PathVariable String id) {
       User user = //Find user by id
       //???
   }
}

それとも、ある種のルーティングを介してこれを解決することは可能でしょうか?
ただし、URL を「分割」し、半分を使用して正しいユーザーを見つけ、後半を解析するときにパラメーターとして使用できるようにすることが重要です。

4

2 に答える 2

2

これらのリクエスト マッピングを備えた 1 つのコントローラーだけではないのはなぜですか?

@RequestMapping("/rest/user")
public class UserController {

   @RequestMapping("{keyType}/{key}/orders")
   public ModelAndView orders(@PathVariable String keyType, @PathVariable String key) {
       User u = findUser(keyType, key);
       // ...
   }

   @RequestMapping("{keyType}/{key}/profile")
   public ModelAndView profile(@PathVariable String keyType, @PathVariable String key) {

       User u = findUser(keyType, key);
       // ...
   }

   @RequestMapping("{keyType}/{key}/address")
   public ModelAndView address(@PathVariable String keyType, @PathVariable String key) {
       User u = findUser(keyType, key);
       // ...
   }

   private User findUser(String keyType, String key) {
       // ...
   }
}
于 2013-08-22T08:34:54.280 に答える