我想动态输入我的春天宁静网址,怎么做? 首先,在我尝试创建动态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服务动态网址?
答案 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