2017-04-01 2 views
0

私は残りのエンドポイントのマッピングに問題があります。それらには、階層的な自然キーが含まれます。だから私はパスを短くするパスを欲し、大きなアイテム空間から結果を得るでしょう。SpringMVCは階層的なURLをマップしません

問題は、最も完全修飾パスが機能し、leas修飾パスが機能しますが、途中の2つのパスは問題ではありません。彼らはコントローラに入ることなく404を返します。だから私はそれがマッピング問題であると仮定します。どんな助けもありがとう。

@RestController 
@RequestMapping("/bookmark/v1") 
public class BookmarkRestController 
{ 
    // this works 
    @GetMapping("/member/{memberId}/content/{contentSource}/{contentType}/{contentId}") 
    public ResponseEntity<Bookmark> read(
    @PathVariable final String memberId, 
     @PathVariable final String contentSource, 
     @PathVariable final String contentType, 
     @PathVariable final String contentId) 
    { 
    ... 
    } 

    // this returns 404 without ever getting into the controller 
    @GetMapping("/member/{memberId}content/{contentSource}/{contentType}") 
    public ResponseEntity<Iterable<Bookmark>> read(
    @PathVariable final String memberId, 
    @PathVariable final String contentSource, 
    @PathVariable final String contentType) 
    { 
    ... 
    } 

    // this returns 404 without ever getting into the controller 
    @GetMapping("/member/{memberId}content/{contentSource}") 
    public ResponseEntity<Iterable<Bookmark>> read(
    @PathVariable final String memberId, 
    @PathVariable final String contentSource) 
    { 
    ... 
    } 

    // this works 
    @GetMapping("/member/{memberId}") 
    public ResponseEntity<Iterable<Bookmark>> read(@PathVariable final String memberId) 
    { 
    ... 
    } 

} 

@GetMapping("/member/{memberId}/content/{contentSource}/{contentType}/{contentId}") 
public ResponseEntity<Bookmark> read(
    @PathVariable final String memberId, 
    @PathVariable final String contentSource, 
    @PathVariable final String contentType, 
    @PathVariable final String contentId) 

@GetMapping("/member/{memberId}content/{contentSource}/{contentType}") 
public ResponseEntity<Iterable<Bookmark>> read(
    @PathVariable final String memberId, 
    @PathVariable final String contentSource, 
    @PathVariable final String contentType) 

@GetMapping("/member/{memberId}content/{contentSource}") 
public ResponseEntity<Iterable<Bookmark>> read(
    @PathVariable final String memberId, 
    @PathVariable final String contentSource) 

@GetMapping("/member/{memberId}") 
public ResponseEntity<Iterable<Bookmark>> read(@PathVariable final String memberId) 
+0

'{memberId} content'に'/'を入れなかったのは意図的ですか? – dunni

答えて

1

あなたのURLマッピングは、つまり、あなたが間で/を欠けているものを二つの方法について間違っているので、あなたは(アウト/で)この/member/{memberId}content

/member/{memberId}content/member/{memberId}/contentへのURLを変更する必要があるときにのみ機能しますリクエストは/member/1contentのようです。 つまり、コントローラーが/member/{memberId}content url &にマップされている場合、要求は/member/1/contentと9のパス区切り文字が付きます)、404エラーが発生します。

+0

うわー。新鮮な目に感謝します。私はそのコードを100回見ました。 – Ezward

関連する問題