UrlMapping Wildcard для @Pathvariable - PullRequest
1 голос
/ 10 июля 2019

Я пытаюсь определить @PathVariable с подстановочным знаком в Web.xml для отображения 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>

Ожидаемый результат с подстановочным знаком - это перенаправлениена URL на основе @Pathvariable, предоставленной

Однако он выдает 404 Ошибка

Ответы [ 2 ]

1 голос
/ 10 июля 2019

Вам нужно указать double (*) в пути URL, чтобы соответствовать любой строке. вот пример.


<servlet-name>appServlet</servlet-name>
        <url-pattern>/tracking/**</url-pattern>
</servlet-mapping>
0 голосов
/ 10 июля 2019

Не используйте отображение через 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);
    }
}

Если нет - проверьте конфигурацию.Весна не может найти ваши контролеры. Взгляните

...