Spring version: 4.2.6.RELEASE Jetty version: 9.3.9.v20160517
I have an embedded Jetty server with SpringMVC configured as follows:
package test;
public class WebServer {
public static void main(String[] args) throws Exception {
AnnotationConfigWebApplicationContext spring = new AnnotationConfigWebApplicationContext();
spring.scan("test");
DispatcherServlet servlet = new DispatcherServlet(spring);
ServletHolder servletHolder = new ServletHolder(servlet);
servletHolder.setName("spring");
ServletContextHandler springHandler = new ServletContextHandler(ServletContextHandler.NO_SESSIONS);
springHandler.setContextPath("/endpoint");
springHandler.addServlet(servletHolder, "/*");
springHandler.setErrorHandler(null);
springHandler.addEventListener(new ContextLoaderListener(spring));
Server server = new Server(9290);
server.setHandler(springHandler);
server.setStopAtShutdown(true);
server.start();
server.join();
}
}
I also have this controller:
package test;
@RestController
public class AController {
@RequestMapping(value = "/", method = RequestMethod.GET)
public ResponseEntity<String> testGet() {
return new ResponseEntity<>("GET response", null, HttpStatus.OK);
}
@RequestMapping(value = "/", method = RequestMethod.POST)
public ResponseEntity<String> testPost() {
return new ResponseEntity<>("POST response", null, HttpStatus.OK);
}
}
When I issue a POST to localhost:9290/endpoint
the testGet()
method is executed, since i am receiving GET response
.
However if I make the POST to localhost:9290/endpoint/
(notice the slash at the end), the testPost()
method is executed, as expected.
Is this a Jetty or Spring bug? I expected either to receive a 404 or the testPost()
method to be executed instead of the testGet
method.