@Pathvariable的网址映射通配符

时间:2019-07-10 05:16:27

标签: java spring web.xml url-pattern path-variables

我正在尝试在Web.xml中使用通配符定义@PathVariable来进行URL映射。 除非我在映射中提供完整路径,否则它似乎无法工作。 这是我的代码。

TrackingController .java-PSEUDO代码

@Controller
@RequestMapping(value = "/tracking")
public class JobController implements Runnable {


    @RequestMapping(value = "/{countrycode}/{urlID}", method = RequestMethod.GET)
    @ResponseBody

    public RedirectView refreshcache(@PathVariable("countrycode") String countrycode, @PathVariable("urlID") String urlID){

         String Oauthurl="";
         System.out.println(countrycode);
         System.out.println(urlID);
         if (countrycode.equals("India"))
         {
             Oauthurl ="https://www.google.co.in/";
         }
         else
         {
             Oauthurl ="https://www.google.com/";
         }
         RedirectView redirectView = new RedirectView();
            redirectView.setUrl(Oauthurl);
            return redirectView;


        }

我已经尝试过的是放置完整路径和带通配符的路径 在web.xml

完整路径-有效

<servlet-name>appServlet</servlet-name>
        <url-pattern>/tracking/India/1</url-pattern>
</servlet-mapping>

通配符-不起作用

<servlet-name>appServlet</servlet-name>
        <url-pattern>/tracking/*</url-pattern>
</servlet-mapping>

使用通配符的预期结果是,它将根据提供的@Pathvariable重定向到网址

但是会引发 404错误

2 个答案:

答案 0 :(得分:1)

您需要在路径url中指定双(*)以匹配任何字符串。 这是示例。


<servlet-name>appServlet</servlet-name>
        <url-pattern>/tracking/**</url-pattern>
</servlet-mapping>

答案 1 :(得分:0)

请勿通过web.xml使用映射。 @RequestMapping已经完成。

以下代码应该可以工作:

@Controller
@RequestMapping(value = "/tracking")
public class JobController {


    @GetMapping("/{countryCode}/{urlID}")//removed @ResponseBody
    public RedirectView refreshCache(@PathVariable String countryCode, @PathVariable String urlID) {
        String oauthUrl;

        System.out.println(countryCode);
        System.out.println(urlID);

        if ("India".equalsIgnoreCase(countryCode)) {//Avoid NPE
            oauthUrl = "https://www.google.co.in/";
        } else {
            oauthUrl = "https://www.google.com/";
        }
        return new RedirectView(oauthUrl);
    }
}

如果没有-检查配置。 Spring找不到您的控制器。 Take a look