Ich habe eine Webanwendung mit spring mvc 3 geschrieben. Sie bietet einen einzelnen Endpunkt, der JSON zurückgibt. Ich habe es erfolgreich mit URL-Parametern ausgeführt, aber jetzt muss ich dies ändern, um stattdessen Pfadvariablen zu verwenden.Spring-MVC-Test - Ein Mock-Repository einsperren, wenn der Integrationstest einen bestimmten Typ erfordert
änderte ich meinen Controller
aus:
@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);
}
}
zu:
@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);
}
}
und meinen Web-xml die URL zur Karte ...
aus:
<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>
zu:
<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>
Aber ich 404 für die HTTP-Anforderung erhalten: http://localhost/some/data/1234
Wo ich weiß, dass 1234 existiert.
Um das Ganze abzurunden, kommt die Anfrage nie sogar auf die Controller-Methode, so dass es die Web-XML-URL-Musterkonfiguration sein muss.
Als Test habe ich versucht, das URL-Muster zu ändern, um genau eine Anfrage mit einem Code zu entsprechen, und es gab JSON wie erwartet zurück, also kenne ich das URL-Muster. Ich weiß einfach nicht, wie ich es beheben kann.
Ich habe versucht:
- /
- /*
- /some/Daten *
- /some/data/*
Wie ist Ihre Spring-Konfiguration geladen? – fabballe
Es ist durch xml-Konfiguration geladen, glauben Sie, dass das einen Einfluss auf die App haben könnte, die mit allem außer Pfadvariablen arbeitet? Wenn dem so ist, werde ich dieses Detail zu der Frage hinzufügen. Merken Sie sich die Anwendungsfunktionen wie erwartet, wenn ich keine Pfadvariable verwende. Zum Beispiel funktioniert es in Ordnung mit einem Pfadparameter als '' 'code''' Wert. – Jeremy
In der Tat sollte die Federkonfiguration nicht das Problem sein. Ich füge eine Antwort mit ein paar Tipps hinzu. – fabballe