如何动态指定Spring Restful WebService URL?

时间:2015-07-30 05:00:27

标签: java spring web-services rest spring-mvc

我想动态输入我的春天宁静网址,怎么做? 首先,在我尝试创建动态URL之前,我创建静态URL。这是我做的:

@RequestMapping(value = "/insert/{id}/{name}/{address}", method = RequestMethod.GET,headers="Accept=application/json")
public void insertsoheaderdinamis(@PathVariable String id, @PathVariable String name, @PathVariable String address) throws ParseException {


}

上面是我的静态网址代码。在未来,我需要的是,我需要一个像localhost:8080/SpringServiceJsonSample/service/updatepool/insert/{here goes id}/{here goes name}/{here goes address}/{new variable goes phone number}/{here goes age}这样的新路径。

我不想更改我的代码,因此我决定创建一个动态网址。我在互联网上阅读。

我试图这样做:

@RequestMapping(value = "/insert/{path}/**", method = RequestMethod.GET,headers="Accept=application/json")
public void insertdynamicurl(@PathVariable("path") String path, HttpServletRequest request) throws ParseException {

}

但这不会做,即使我在调试时也无法进入我的功能。它总是给我" noHandlerFound"在我的控制台日志中。如何正确地为springrestful服务动态网址?

2 个答案:

答案 0 :(得分:1)

您可以查看URI Template Patterns with Regular Expressions建议在@RequestMapping注释中使用正则表达式。

@RequestMapping注释支持在URI模板变量中使用正则表达式。语法为{varName:regex},其中第一部分定义变量名称,第二部分定义正则表达式。例如:

@RequestMapping("/spring-web/{symbolicName:[a-z-]+}-{version:\d\.\d\.\d}.{extension:\.[a-z]}")
  public void handle(@PathVariable String version, @PathVariable String extension) {    
    // ...
  }
}

除此之外,您还可以使用请求属性名称HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE匹配其余的网址字符串,如下所示。

@RequestMapping("/{id}/**")
public void foo(@PathVariable("id") int id, HttpServletRequest request) {
    String restOfTheUrl = (String) request.getAttribute(
        HandlerMapping.PATH_WITHIN_HANDLER_MAPPING_ATTRIBUTE);
    ...
}

答案 1 :(得分:0)

Shishir的方法很好,但即使正则表达式也只匹配第一个正斜杠的值,因为默认的static WebClient client; //this is class variable public void parsePage(){ HtmlPage pages; pages = client.getPage(myURL); Document doc = Jsoup.parse(pages.asXml()); //Using JSOUP library here client.close(); ///do work on the Document } 使用正斜杠作为路径变量的分隔符。

这意味着您将始终必须静态列出具有所有可能路径变量组合的映射。但是,在函数参数方面,您不必列出所有路径变量,因为您可以使用将捕获所有路径变量的映射而不管计数,这可以用来实现一般性,

之类的东西
AntPathMatcher