繁体   English   中英

Spring请求映射到特定路径变量值的不同方法

[英]Spring request mapping to a different method for a particular path variable value

@Controller
@RequestMapping("/authors")
public class AuthorController {
    @RequestMapping(value = "/{id}", method = RequestMethod.GET)
    public Author getAuthor(
        final HttpServletRequest request,
        final HttpServletResponse response,
        @PathVariable final String id)
    {
        // Returns a single Author by id
        return null;
    }

    @RequestMapping(value = "/{id}/author-properties", method = RequestMethod.GET)
    public AuthorProperties getAuthorProperties(
        final HttpServletRequest request,
        final HttpServletResponse response,
        @PathVariable final String id)
    {
        // Returns a single Author's List of properties
        return null;
    }

    @RequestMapping // How to map /authors/*/author-properties to this method ????
    public List<AuthorProperties> listAuthorProperties(
        final HttpServletRequest request,
        final HttpServletResponse response)
    {
        // Returns a single Author's List of properties
        return null;
    }
}

class Author {
    String propertiesUri;
    // other fields
}

class AuthorProperties {
    String authorUri;
    // other fields
}

基本上我需要:

  • /作者 - 列出所有作者
  • / authors / 123 - 通过id 123获取作者
  • / authors / 123 / author-properties - 获取123作者的AuthorProperties对象
  • / authors / * / author-properties - 获取所有作者的AuthorProperties列表

当我尝试

@RequestMapping(value = "/*/author-properties", method = RequestMethod.GET)

它仍将map /authors/*/author-properties映射到getAuthorProperties方法,路径变量值为“*”。

看看这是否有效

@RequestMapping(value = "/{id:.*}/author-properties", method = RequestMethod.GET)

您可以使用正则表达式约束单个作者的映射,例如:

@RequestMapping("/{authorId:\\d+}/author-properties")
public String authorProperties(@PathVariable String authorId) {}

这仅匹配作者ID为数字的URL。

对于所有作者属性的请求,您可以使用:

@RequestMapping("/*/author-properties")
public String allProperties() { }

Hovewer *具有特殊含义,因此它也会匹配/foo/author-properties 要解决它,你可以使用类似的东西:

@RequestMapping("/{all:\\*}/author-properties")
public String allProperties() { }

如果为所有作者提取AuthorProperties列表是常见的情况,那么我认为你应该创建一个这样的URI:“/ author-properties”。 否则Bohuslav给出的答案就是你想要的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM