Ich baue REST-Dienste über Spring MVC in der Anwendung wandern, wo die GUI von Wicket verwaltet wird. Grundsätzlich brauche ich nur die DispatcherServlet
und eine Steuerung mit @RequestMapping
/@RequestBody
.Wie aus AnnotationMethodHandlerAdapter zu RequestMappingHandlerAdapter
Da Dienste JSON dienen, muss ich MappingJackson2HttpMessageConverter
setzen. Ich kann dies tun über AnnotationMethodHandlerAdapter
und das funktioniert gut:
@Configuration
@ComponentScan("cz.swsamuraj.wicketspring")
public class SpringRestConfiguration {
@Bean
public AnnotationMethodHandlerAdapter annotationMethodHandlerAdapter() {
HttpMessageConverter<?>[] converters = { new MappingJackson2HttpMessageConverter()};
AnnotationMethodHandlerAdapter adapter = new AnnotationMethodHandlerAdapter();
adapter.setMessageConverters(converters);
return adapter;
}
}
Das Problem ist, dass AnnotationMethodHandlerAdapter
ist veraltet und es wird empfohlen RequestMappingHandlerAdapter
stattdessen zu verwenden.
Aber wenn ich diese Konfiguration verwenden:
@Configuration
@ComponentScan("cz.swsamuraj.wicketspring")
public class SpringRestConfiguration {
@Bean
public RequestMappingHandlerAdapter requestHandler() {
RequestMappingHandlerAdapter adapter = new RequestMappingHandlerAdapter();
adapter.getMessageConverters().add(new MappingJackson2HttpMessageConverter());
return adapter;
}
}
Ich erhalte eine Ausnahme:
javax.servlet.ServletException: No adapter for handler [[email protected]]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler
at org.springframework.web.servlet.DispatcherServlet.getHandlerAdapter(DispatcherServlet.java:1198)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
Also, meine Frage ist: wie kann ich einen Handler Adapter im RequestMappingHandlerAdapter
up?
Ich verbrachte einige Tage der Forschung, aber ich fand kein nützliches Beispiel für die Konfiguration RequestMappingHandlerAdapter
. Alle Ratschläge sagen nur @EnableWebMvc
auf die Konfiguration, aber dies ist nicht der Weg wegen dieser Koexistenz Wicket-Spring.
einfach einen vollständigen Kontext zu schaffen, ich habe ein kleines erstellbar und runnable Projekt auf Bitbucket erstellt: sw-samuraj/blog-wicket-spring-rest
Überprüfen Sie diesen Link https://github.com/spring-projects/spring-boot/issues/5004 – Eljaiek
Soweit ich verstehe, benötigen Sie einen einzelnen Spring-Kontext, mehrere URLs für REST-Dienste und den Rest von URLs wird durch Wicket zugeordnet. Ihr Problem besteht darin, wie Sie einen einzelnen Kontext erstellen und beide Technologien auf URLs zuordnen, die diesen Kontext teilen. Ist das richtig? –
Fast korrekt. Erstens ist es nicht notwendig, nur einen * Spring * -Kontext zu haben - momentan habe ich zwei (einen für * Wicket *, einen für REST). Zweitens sollte * Wicket * diese REST-URLs (und eventuell den REST-Kontext) nicht kennen. Aber das funktioniert schon für mich. Das einzige Problem ist das im Titel (migrieren 'AnnotationMethodHandlerAdapter' zu' RequestMappingHandlerAdapter'). –