2017-04-01 86 views
0

我的休息端点映射有问题。它们涉及分级的自然键。所以我想要缩短路径的路径,然后从更大的项目空间中获得结果。SpringMVC不会映射层次结构URL

问题是,最完全合格的路径工作和合格的路径工作,但不是中间的两条路径;他们返回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带有路径分隔符),您将得到404错误。

+0

哇。谢谢你的新眼睛。我看了那个代码100次。 – Ezward