在@RequestMapping定义的uri设定变量,可以controller的method中通过annatation @PathVariable可以得到变量值。
1.在method中定义uri
@RequestMapping(value="/hot_{hotId}.html",method = RequestMethod.GET)
public String form(ModelMap map, HttpServletRequest request,@PathVariable Integer hotId) {
map.addAttribute("hotId", hotId);
return "post";
}
注意:如果uri中的hotId 和参数中hotId类型Integer不匹配,浏览器返回400 Bad Request错误,非404.
2.设定两个变量
@RequestMapping(value="/region_{region}/hot_{hotId}.html",method = RequestMethod.GET)
public String form(ModelMap map, HttpServletRequest request,@PathVariable Integer regionId,@PathVariable Integer hotId) {
map.addAttribute("regionId", regionId);
map.addAttribute("hotId", hotId);
return "post";
}
3.uri分开在类声明和method的申明中
@Controller
@RequestMapping(value="/post_{regionId}")
public class PostController {
@RequestMapping(value="/hot_{hotId}.html",method = RequestMethod.GET)
public String form(ModelMap map, HttpServletRequest request,@PathVariable Integer regionId,@PathVariable Integer hotId) {
map.addAttribute("regionId", regionId);
map.addAttribute("hotId", hotId);
return "post";
}
}
4.uri中的变量名可以和method中的变量名不同
@RequestMapping(value="/owners/{ownerId}", method=RequestMethod.GET)
public String findOwner(@PathVariable("ownerId") String theOwner, Model model) {
// implementation omitted
}
tips:如果uri是这样 无法maping到uri @RequestMapping(value="/{regionId}/{hotId}")
总之很有意思,轻轻松松url静态话,不用apache去rewrite了。