2015-12-08 12 views
5

Napisałem aplikację internetową za pomocą sprężyny mvc 3. Zapewnia pojedynczy punkt końcowy, który zwraca JSON. Udało mi się go pomyślnie uruchomić przy użyciu parametrów url, ale teraz muszę to zmienić, aby zamiast tego używać zmiennych ścieżek.Wiosenny test MVC - Wstrzykiwanie symulowanego repozytorium, gdy test integracji wymaga określonego typu.

zmieniłem kontroler

od:

@Controller 
public class DataController { 

    @Autowired 
    private IDataService dateService; 

    @RequestMapping(
      value = "/some/data", 
      method = RequestMethod.GET, 
      produces = "application/json" 
    ) 
    public @ResponseBody Data getDataByCode(@RequestParam String code) { 
     return versionService.getDataByCode(code); 
    } 
} 

do:

@Controller 
public class DataController { 

    @Autowired 
    private IDataService dateService; 

    @RequestMapping(
      value = "/some/data/{code}", 
      method = RequestMethod.GET, 
      produces = "application/json" 
    ) 
    public @ResponseBody Data getDataByCode(@PathVariable String code) { 
     return versionService.getDataByCode(code); 
    } 
} 

i mojego XML Web mapowanie url ...

od:

<servlet> 
     <servlet-name>dataBycode</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:/config/servlet-config.xml</param-value> 
     </init-param> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dataBycode</servlet-name> 
     <url-pattern>/some/data</url-pattern> 
    </servlet-mapping> 

do:

<servlet> 
     <servlet-name>dataBycode</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <init-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>classpath:/config/servlet-config.xml</param-value> 
     </init-param> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>dataBycode</servlet-name> 
     <url-pattern>/some/data/*</url-pattern> 
    </servlet-mapping> 

Ale ja dostaję 404 dla żądania http: http://localhost/some/data/1234 Jeżeli wiem, że 1234 nie istnieje.

Na dodatek żądanie nigdy nie przechodzi do metody kontrolera, więc musi to być konfiguracja wzorca URL strony internetowej.

W ramach testu próbowałem zmienić wzór adresu URL tak, aby dokładnie odpowiadał żądaniu z kodem i zwróciło JSON zgodnie z oczekiwaniami, więc znam jego wzór adresu URL. Po prostu nie wiem jak to naprawić.

Próbowałem:

  1. /
  2. /*
  3. /some/data *
  4. /some/data/*
+0

Jak konfiguruje się wiosna? – fabballe

+0

Czy jest ona załadowana przez konfigurację XML, co może mieć wpływ na działanie aplikacji z dowolnymi zmiennymi ścieżki? Jeśli tak, to dodam ten szczegół do pytania. Zapamiętaj funkcje aplikacji zgodnie z oczekiwaniami, jeśli nie używam zmiennej ścieżki. Na przykład działa poprawnie z parametrem ścieżki jako wartością '' 'code'''. – Jeremy

+0

Rzeczywiście konfiguracja sprężyny nie powinna stanowić problemu. Dodaję odpowiedź z kilkoma wskazówkami. – fabballe

Odpowiedz

1

Twój url-pattern powinno być:

<servlet-mapping> 
     <servlet-name>dataBycode</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

W drugiej strony, można próbować uzyskać dostęp http://localhost/some/data/myTest i umieścić System.out .println w metodzie getDataByCode, aby zobaczyć, czy metoda jest wywoływana.

Jeśli to działa, myślę, że problem pochodzi ze Spring MVC, który interpreter "1234" jako liczba całkowita, a nie String.

+0

Hum ciekawie Spróbuję tego i powrócę do ciebie – Jeremy

+0

Zmieniłem wzór adresu URL na '' '/' '' i wydaje mi się do pracy teraz, nie miałem problemu z typem zmiennej ścieżki na końcu. – Jeremy

+0

Dziwne, że próbowałem tego w przeszłości, być może moja konfiguracja się zmieniła odkąd opublikowałem to pytanie, które naprawiło głębszy problem. – Jeremy

0

Jeśli Twój są przy użyciu Eclipse:

  1. Podwójne kliknięcie na serwerze wewnątrz Server Zobacz

server view

  1. Idź do modułów Tab

enter image description here

  1. sprawdź ścieżkę swojej aplikacji

Ostateczny wniosek url = ścieżka + niektóre/data/1234

+0

Jak już powiedziałem w moim pytaniu, wiem, że ścieżka jest poprawna, ponieważ mogę zezwolić na dostęp do określonej wartości w moim formacie adresu URL web.xml i zwraca oczekiwane dane. Po prostu próbuję użyć zmiennej ścieżki, w której pojawia się problem, i otrzymuję 404. – Jeremy

Powiązane problemy