2016-01-13 11 views
6

私はSpringブート1.3.1.RELEASEを使用しており、カスタムリポジトリ+コントローラを作成しようとしています。私はbasePathを/ apiに設定し、カスタムコントローラのURIを自動的にbasePathに関連付ける方法を理解することはできません。私は行方不明の魔法の一部ですか?設定済みのベースパスのスプリングデータRESTコントローラ

ここにコントローラがあります。私は以下の属性のすべての組み合わせも試しました。あなたが私が何を試したかを見ることができるようにコメントされたものに残しました。

@RepositoryRestController 
// @Controller 
@ExposesResourceFor(AnalystSummaryModel.class) 
// @RequestMapping("/analystsummaries") 
public class AnalystSummaryController { 

    @Autowired 
    AnalystSummaryRepository repository; 

    @Autowired 
    private AnalystSummaryResourceAssembler resourceAssembler; 

    @ResponseBody 
    @RequestMapping(method = RequestMethod.GET, produces = {MediaType.APPLICATION_JSON_VALUE}) 
    public PagedResources<AnalystSummaryModel> getAnalystSummaries(
      final Pageable pageable, 
      final PagedResourcesAssembler assembler) { 
     final Page<AnalystSummaryModel> analystSummaries = repository.findAll(pageable); 
     return assembler.toResource(analystSummaries, resourceAssembler); 
    } 
} 

さらに、別のquestionに基づいてResourceProcessorを作成します。

私は/ APIエンドポイントを表示すると、私は以下を参照してください。

{ 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080" 
    }, 
    "profile" : { 
     "href" : "http://localhost:8080/api/profile" 
    } 
    } 
} 

私は@RequestMappingのコメントを解除すると、私はその後、取得:

{ 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/analystsummaries" 
    }, 
    "profile" : { 
     "href" : "http://localhost:8080/api/profile" 
    } 
    } 
} 

私はマッピングを持って何をしないのです私はapplication.ymlで次のように設定したbasePathを基準にしていますか?

spring.data.rest.baseパス:/ API

いくつかのより多くの情報:

@BasePathAwareを使用するには、実際にはこのコントローラサービスに二つの異なるURIを結果!これは、/ api/analystSummaries(自動複数化などのため)に/と同様に表示されます。次に、ControllerLinkBuilderを使用する場合は、最初のパスを使用します。だから私の更新された質問は:なぜこれは2回公開されていますか? @RequestMappingがないので暗黙ルートを削除して/ apiの下にあるものを保持するにはどうすればよいですか?

答えて

0

spring.data.rest.base-path: /apiを取り除くと、この追加取得:これは春のブート1.4.0.RC1ので、具体的な構成で行うことができます

server.servlet-path: /api 
+0

で私の答えを参照してください。私はまだルートにページを反応させるのに役立つしたいです。これはサーバーが/ apiまたはその下のものだけを聞くようにしませんか? –

+0

'api'はすべてのURLのプレフィックスになります。あなたが質問に反応uiを言及していない –

+0

ありがとう、あなたのアプローチはここで動作しませんでした。私は実際には/ apiの下にあるSDRコントローラが必要です。 SDRのドキュメントによると、これはうまくいくはずです。 オリジナルの質問に追加した@BasePathAwareを使用すると、他にもいくつかの発見があります –

関連する問題