Ho un'applicazione web a molla, che ha pochi controller. Il mio problema è che durante il tentativo di ridistribuire i controller da .war a tomcat (o semplicemente il riavvio dell'applicazione) non vengono mappati dal primo tentativo. Devo ridistribuire l'app o riavviarla di nuovo fino a quando non vengono mappati definitivamente ... Non ho idea del motivo per cui ciò stia accadendo.Il controller Java spring non viene mappato
Uno dei miei controllori:
@RestController
@RequestMapping("kt")
public class KTIntegrationController {
@Autowired
KtImportService importService;
@ExceptionHandler(ItemNotFoundException.class)
@ResponseStatus(value= HttpStatus.NOT_FOUND)
public RestError handleNotFoundException(ItemNotFoundException e) {
return new RestError(404, "NOT FOUND", e.getMessage());
}
@RequestMapping(value="import/to-db", method=RequestMethod.POST)
public RestResponse<List<String>> loadToDB(@RequestParam("initiator") String initiator,
@RequestParam("process") String pid,
@RequestParam("category") String institution) throws KtImportException {
return new RestResponse<List<String>>(importService.loadToDB(initiator,pid,institution));
}
}
registro Tomcat (quando il controller non è stato mappato):
...
...
[12:47:40.887] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.boot[email protected]bf5b3f: startup date [Thu Aug 27 12:47:23 EEST 2015]; root of context hierarchy
[12:47:41.107] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
[12:47:41.108] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
[12:47:41.173] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[12:47:41.173] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[12:47:41.291] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[12:47:41.895] INFO o.s.j.e.a.AnnotationMBeanExporter - Registering beans for JMX exposure on startup
[12:47:41.922] INFO o.s.boot.SpringApplication - Started application in 19.463 seconds (JVM running for 547.311)
...
...
registro Tomcat (quando il controller è stato mappato):
...
...
[11:27:39.426] INFO o.s.w.s.m.m.a.RequestMappingHandlerAdapter - Looking for @ControllerAdvice: org.springframework.boot[email protected]1722a662: startup date [Thu Aug 27 11:27:28 EEST 2015]; root of context hierarchy
[11:27:39.577] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/kt/import/to-db],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public com.gerasolutions.rest.RestResponse<java.util.List<java.lang.String>> com.gera.integration.rc.rest.controller.KTIntegrationController.loadToDB(java.lang.String,java.lang.String,java.lang.String) throws com.gera.integration.rc.core.domain.KtImportException
...
...
[11:27:39.586] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[],custom=[]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
[11:27:39.586] INFO o.s.w.s.m.m.a.RequestMappingHandlerMapping - Mapped "{[/error],methods=[],params=[],headers=[],consumes=[],produces=[text/html],custom=[]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest)
[11:27:39.634] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[11:27:39.635] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[11:27:39.706] INFO o.s.w.s.h.SimpleUrlHandlerMapping - Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
[11:27:40.009] INFO o.s.j.e.a.AnnotationMBeanExporter - Registering beans for JMX exposure on startup
[11:27:40.022] INFO o.s.boot.SpringApplication - Started application in 12.283 seconds (JVM running for 19.89)
...
...
I non aspettatevi di trovare una risposta su come risolvere questo problema, dato che questo è un bug piuttosto confuso (beh, almeno per me), ma alcuni idee o indicazioni su cui poter iniziare a guardare sarebbero molto utili. Struttura
--EDIT--
Progetto:
app
-> src
-> main
-> java
-> com.app.a
-> c
-> config
-> Config.class
-> r
-> controller
-> Controller.class
Application.class
ServletInitialiazer.class
-> resources
-> webapp (this is empty)
Application.class:
@Configuration
@ComponentScan(basePackages={"com.app.a.*"})
@EnableAutoConfiguration
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
ServletInitializer.class:
public class ServletInitializer extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
}
Config.class ha origine dati e altri r fagioli definiti in esso. (Non dovrebbe influire questo bug)
--EDIT--
Cosa c'è di più, se ho semplicemente il boot questo .war applicazione dal mio computer portatile, utilizzando la linea di comando: mvn spring-boot:run
, tutto funziona, i controllori sono sempre essere mappato dal primo tentativo.
Sfortunatamente, questo non sembra funzionare. Ho dimenticato di dire che questa app dipende da un altro progetto con una struttura molto simile. Così ComponentScan assomiglia a questo: '@ComponentScan (basePackages = {" com.app.a. * "," com.app.a.services "})' com.app.a.services è in un altro progetto (file jar incluso attraverso maven depenceny) – CrazySabbath