2017-03-29 6 views
1

私のプロジェクトは、カスタムjson形式からjson-halおよびspring-data-restに移行しています。 "古い" jsonのサポートを継続するために、私は新しいSpring-Data-Restに提供されている既存のResource-Controllerを並列に実行したいと考えています。私はspring-data-rest GETと並行してエンドポイントを提供できますか?

私はspring-data-restを既存のコントローラと同じURLを使用するように設定していますが、古いコントローラのみが使用され、accept-headerが一致しないとエラー応答が返されます。私は別のURLを使用すると、すべてが動作します

コントローラをspring-data-restと並列に実行し、Accept-Header?

古いコントローラー:

@RepositoryRestController 
@RequestMapping(value = "/api/accounts", produces = {"application/custom.account+json"}) 
public class AccountResource { 

    @RequestMapping(method = RequestMethod.GET) 
    @PreAuthorize("#oauth2.hasScope('read') and hasRole('ROLE_ADMIN')") 
    public ResponseEntity<List<Account>> getAll(
     @RequestParam(value = "page", required = false) Integer offset, 
     @RequestParam(value = "per_page", required = false) Integer limit, 
     @RequestParam(value = "email", required = false) String email 
    ) throws URISyntaxException { 
     ... 
    } 
} 
+0

['headers'](http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/bind/annotation/RequestMapping.html#headers)を試したことがありますか? - )を '@ RequestMapping'に追加しましたか? – heenenee

答えて

1

@RepositoryRestControllertype level@RequestMappingとうまく再生されません。 最初の手順では、RequestMappingのproducesパラメータを削除することで、実際に要求をキャッチするようにしてください(ここではGetMappingのショートカットを使用しています)。私もそれが今の関連ではありませんため@PreAuthorize注釈を除去し、(デバッグ用)Acceptヘッダの値をキャッチするためのパラメータを導入しました:

@RepositoryRestController 
public class AccountResource { 

    @GetMapping(value = "/api/accounts") 
    public ResponseEntity<List<Account>> getAll(
     @RequestParam(value = "page", required = false) Integer offset, 
     @RequestParam(value = "per_page", required = false) Integer limit, 
     @RequestParam(value = "email", required = false) String email, 
    ) throws URISyntaxException { 
     ... 
    } 

} 

これを使用すると、GET/APIをカスタマイズすることができるはずです/期待どおりに動作する場合、あなたはでき

を意のままにを占め、まだPOST/PUT/PATCHの恩恵を受ける.../API /春データ休息によって自動的に提供さを占め、また、そのコンテンツタイプを主張:

  • GetMapping注釈に(何の括弧は、単一の値のために必要ありません)produces = "application/custom.account+json"してメソッドの範囲を狭めるしようとすると、あなたのエンドポイントと春両方のエンドポイントのメソッドを生成していることがわかりは下盛です
  • あなた@PreAuthorize注釈を復活
  • GET今

    @RepositoryRestController // NO MAPPING AT THE TYPE LEVEL 
    public class AccountResource { 
    
        @GetMapping(value = "/api/accounts", // Mapping AT THE METHOD LEVEL 
           produces = "application/custom.account+json") // the content-type this method answers to 
        @PreAuthorize("#oauth2.hasScope('read') and hasRole('ADMIN')") // ROLE is 'ADMIN' not 'ROLE_ADMIN' 
        public ResponseEntity<List<Account>> getAll(
         @RequestHeader("Content-Type") String contentType, 
         @RequestParam(value = "page", required = false) Integer offset, 
         @RequestParam(value = "per_page", required = false) Integer limit, 
         @RequestParam(value = "email", required = false) String email, 
        ) throws URISyntaxException { 
         ... 
        } 
    
    } 
    

    を::

    あなたに与え@RequestHeaderパラメータ

を取り除きます

  • カールホスト: "同意する:アプリケーション/ custom.account + JSON" ポート/API /アカウント-H:ポート/API /アカウントは春コントローラエンドポイント
  • カールホストにヒットするヒットするカスタムコントローラのエンドポイント。
+0

私はあなたのことを記述することは可能だと知っていますが、私は自動的にspring-data-rest GETエンドポイントを保存し、独自のcontent-type用の独自仕様を提供したいと思います。これまでのところ、私は自分自身を実装するものは、自動的なものを置き換えるもののように見えます。 – Laures

+0

私は、あなたが求めている結果を得るために、あなたは一歩一歩ステップを提供しました。私はちょうど自分自身を試して、それは動作し、あなたは両方の自動とカスタムのエンドポイントを取得することができます...私は最終版とカールの例で私の答えを編集します... –

+0

ところで、あなたはPageableでオフセットと限界のパラメータを置き換えることを検討する必要があります。 –

関連する問題