簡體   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