1

Как я могу переписать URL в SpringMVC с tuckey's UrlRewriteFilter так:SpringMVC URL Rewrite с Таки UrlRewriteFilter

От

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 
    } 
} 

ответ

3

Добавить зависимость, если вы используете Maven

<dependency> 
    <groupId>org.tuckey</groupId> 
    <artifactId>urlrewritefilter</artifactId> 
    <version>4.0.3</version> 
</dependency> 

Включить фильтр в вашем web.xml

<filter> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>UrlRewriteFilter</filter-name> 
    <url-pattern>/*</url-pattern> 
    <dispatcher>REQUEST</dispatcher> 
    <dispatcher>FORWARD</dispatcher> 
</filter-mapping> 

Добавить следующее правило в WEB-INF/urlrewrite.xml

<urlrewrite> 
    <rule> 
     <from>^/demo/api.do?method=getUser&amp;uid=(.*)$</from> 
     <to>/demo/api/user/$1</to> 
    </rule> 
</urlrewrite> 
2

Вам действительно нужно использовать фильтр перезаписи 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 
} 
1

В 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; 
}