Hallo,
hab seit einigen Tagen dieses Problem (benutze Spring 3.0.RELEASE):
Merkwürdig ist, dass Spring die richtige aufzurufende Methode findet nur dann URI Templates und URI Parameter nicht aufgelöst/ gefunden werden.
Habe mich dabei u.a. an Spring 3.0 15.Web MVC framework gehalten.
Was mache ich falsch? Und wichtiger für den Moment, wie löse ich die Probleme.
Falls ihr mehr Infos benötigt, fragt nach.
Danke für eure Bemühungen.
Folgenden Klassen beschrieben mein Problem.
Controller:
dazugehörige Testfall:
Fehlermeldungen:
Fehler 1:
Fehler 2:
FooSuperTest implementiert lediglich das Grundgerüst für meine Spring Testklassen. Interessant ist hier
in dieser Datei steht unter anderem
[xml]
<context:component-scan base-package="foo" />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
</bean>
[/xml]
hab seit einigen Tagen dieses Problem (benutze Spring 3.0.RELEASE):
Merkwürdig ist, dass Spring die richtige aufzurufende Methode findet nur dann URI Templates und URI Parameter nicht aufgelöst/ gefunden werden.
Habe mich dabei u.a. an Spring 3.0 15.Web MVC framework gehalten.
Was mache ich falsch? Und wichtiger für den Moment, wie löse ich die Probleme.
Falls ihr mehr Infos benötigt, fragt nach.
Danke für eure Bemühungen.
Folgenden Klassen beschrieben mein Problem.
Controller:
Java:
package foo;
@Controller
public FooController
{
// Fehler 1
@RequestMapping(value={"/project.html","/project/"})
public String index(@RequestParam("pid") String pid)
{
return "foo"+pid;
}
// Fehler 2
@RequestMapping(value = "/project/{projectId}", method = RequestMethod.GET)
public String list(@PathVariable("projectId") String projectId, ModelMap model)
{
model.addAttribute("project", projectId);
return "projects";
}
// läuft ohne Probleme
@RequestMapping(value={"/projects2.html"})
public String index2()
{
return "foo";
}
}
dazugehörige Testfall:
Java:
package foo;
public class FooControllerTest extends FooSuperTest
{
@Autowired
protected FooController fooController;
@Before
public void setUp()
{
adapter = new AnnotationMethodHandlerAdapter();
request = new MockHttpServletRequest();
response = new MockHttpServletResponse();
}
@Test
public void testMapping2() throws Exception
{
System.out.println("testURLMapping");
request.setMethod("GET");
request.setRequestURI("/project/aadad");
// Fehler2: Aufruf von list(String, ModelMap)
System.out.println(adapter.getSupportedMethods());
adapter.handle(request, response, fooController);
}
@Test
public void testDdd() throws Exception
{
System.out.println("ddd");
ProjectController instance = fooController;
// Fehler1: Aufruf von index(String)
request.setRequestURI("/project.html?pid=asd");
adapter.handle(request, response, instance);
}
@Test
public void testIndex2() throws Exception
{
System.out.println("ddd2");
ProjectController instance = projectController;
request.setRequestURI("/projects2.html");
request.setMethod("GET");
//Aufruf von index2()
adapter.handle(request, response, instance);
}
}
Fehlermeldungen:
Fehler 1:
Java:
org.springframework.web.servlet.mvc.multiaction.NoSuchRequestHandlingMethodException: No matching handler method found for servlet request: path '/project.html?pid=asd', method 'GET', parameters map[[empty]]
Java:
org.springframework.web.bind.annotation.support.HandlerMethodInvocationException: Failed to invoke handler method [public java.lang.String foo.fooController.list(java.lang.String,org.springframework.ui.ModelMap)]; nested exception is java.lang.IllegalStateException: Could not find @PathVariable [projectId] in @RequestMapping
FooSuperTest implementiert lediglich das Grundgerüst für meine Spring Testklassen. Interessant ist hier
Java:
@ContextConfiguration(locations =
{
"file:C:/Projekte/foo/web/WEB-INF/test.xml"
})
[xml]
<context:component-scan base-package="foo" />
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"/>
<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
</bean>
[/xml]