我正在尝试在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错误
答案 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