2017-07-11 7 views
1

私はURLが/users/users/58で、UserControllerによって処理されています。 ImageControllerにImageに関するすべてのコードを移動するために、/users/58/imagesをImageControllerにリダイレクトしたいと思います。 、別のものからSpring Controllerを呼び出す

@RequestMapping(method = RequestMethod.GET, value = "/users") 
List<User> paginate() { ... } 

@RequestMapping(method = RequestMethod.GET, value = "https://stackoverflow.com/users/{id}") 
List<User> get(Long id) { ... } 

@RequestMapping(method = RequestMethod.GET, value = "https://stackoverflow.com/users/{id}/images") 
List<Image> images(Long userId) { 
    // What I want to do is something like this 
    ImageController images = new ImageController(); 
    return images.getByUser(userId); 
} 

まずその良いデザインである:ここでは

はUserControllerではどのように見えるのですか?うん、コントローラから別のコントローラを呼び出すにはどうすればいいですか?

+0

私は、適切なマッピングを持つ別のコントローラを定義することができます。 SpringはあなたのURIと一致する最も特定の要求マッピングを使用するべきです。 –

+1

あなたが必要とするサービスは、別のコントローラやリポジトリではありません。 – efekctive

+0

.. 'ImageController'はすでに「適切な位置に」あります。どのリクエストパスにマップされていますか? – xerx593

答えて

0

フロントコントローラ(Dispatcherサーブレット)がすべての要求を統制しているため、コントローラから別のコントローラを呼び出すことはできません。あなたのURIリクエストに基づいて、コントローラ/リクエストハンドラとのマッチングによってハンドラが処理されます。だから、コントローラをリダイレクトからURIをリダイレクトし、リダイレクトのコントローラ

@RequestMapping(method = RequestMethod.GET, value = "https://stackoverflow.com/users/{id}/images") 
    public String getUserId() { 
     return "redirect:/getUsersPage/{id}"; 
    } 

ハンドラをリダイレクトにリダイレクトさcontroller.ExampleでURI(ハンドラメソッドは、同じコントローラである必要はありません)

ハンドラのことを拾うことができますデザインに関しては、コントローラ

@Autowired 
    ImageService imageService; 

    @RequestMapping(value = "/getUsersPage/{id}", method = RequestMethod.GET) 
    public String getUsersPage(@PathVariable Long id, Model model) { 
     return imageService.getByUser(id);; 
    } 

:それはRESTサービスであり、何のフロントエンドが存在しない場合は、あなたの要求ハンドラは、メッセージ本文を返しているので、あなたがサービスを注入(imageService言う)とサービスから得られた値を返すことができます。

関連する問題