2017-04-01 1 views
0

내 휴식 끝점 매핑에 문제가 있습니다. 여기에는 계층 적 자연 키가 포함됩니다. 따라서 경로를 줄이는 경로를 원하면 큰 항목 공간에서 결과를 얻습니다.SpringMVC가 계층 적 URL을 매핑하지 않습니다.

문제는 대부분 정규화 된 경로가 작동하고 leas 정규화 된 경로가 작동하지만 가운데 두 경로가 작동하지 않는다는 것입니다. 그들은 컨트롤러에 들어 가지 않고도 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} 콘텐츠'에'/'를 넣지 않았습니까? – 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