SpringMVC url用tuckey UrlRewriteFilter重写

如何使用tuckey的UrlRewriteFilter重写SpringMVC中的url,如下所示:

http://localhost:8080/demo/api.do?method=getUser&uid=1001

http://localhost:8080/demo/api/user/1001

控制器片段:

 @Controller @RequestMapping("/api.do") public class APIController { @RequestMapping(params = "method=getUser") public String methodName(HttpServletRequest request) { //CODE BLOCK } } 

如果您正在使用maven,请添加依赖项

  org.tuckey urlrewritefilter 4.0.3  

web.xml中启用filter

  UrlRewriteFilter org.tuckey.web.filters.urlrewrite.UrlRewriteFilter   UrlRewriteFilter /* REQUEST FORWARD  

将以下规则添加到WEB-INF / urlrewrite.xml

   ^/demo/api.do?method=getUser&uid=(.*)$ /demo/api/user/$1   

你真的需要使用URL重写文件管理器吗? 为什么不为两种类型的URL定义两种方法,并路由到单一方法来处理处理

 @RequestMapping(value = "/demo/api.do?"....) public void method1(){ //... handler(); } @RequestMapping(value = "/demo/api/user/{user-id}"....) public void method1(){ //... handler(); } private void handler(){ //This method will have all the controller logic } 

在SpringMVC中,您可以简单地完成

 @Controller @RequestMapping("/api") public class APIController { @RequestMapping("/user") public ModelAndView methodName(HttpServletRequest request) { //CODE BLOCK // to redirect other view new ModelAndView("...your view page"); } @RequestMapping("/user/{user_id}") @ResponseBody public String methodName(HttpServletRequest request) { //CODE BLOCK } } 

@ResponseBody如果只发送对象值

你也可以发送user_id作为参数

 public String methodName(@RequestParam("user_id") String userid, Model model) 

重要的是你为视图解析器添加了Bean ,这里是基于注释的示例

 @Bean public UrlBasedViewResolver setupViewResolver() { UrlBasedViewResolver resolver = new UrlBasedViewResolver(); resolver.setPrefix("/WEB-INF/pages/"); resolver.setSuffix(".jsp"); // what you used resolver.setViewClass(JstlView.class); return resolver; }