Ich gehe dieses Buch über erholsame Webdienste mit Frühling durch. Ich beschloss, mich von dem, was sie taten, zu entfernen und Java-Konfigurationsdateien zu verwenden. Aus irgendeinem Grund würde der Dienst nach dem Umschalten auf die Java-Konfiguration (im Konsolenfenster) korrekt ausgeführt, aber wenn ich auf localhost zum Endpunkt gehe, erhalte ich Folgendes:
White-Label-Fehlerseite
Diese Anwendung verfügt über keine explizite Zuordnung für/error. Sie sehen dies also als Fallback.
Sa Apr 23 20:48:25 PDT 2016 Es ist ein unerwarteter Fehler aufgetreten (Typ = Nicht gefunden, Status = 404). Keine Nachricht verfügbar
Und das ist die Antwort von der GET-Anfrage:
{
"timestamp": 1461470029110,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/greeting"
}
Das nächste Kapitel dieser Geschichte beginnt damit, dass ich zur Einstiegsseite auf der Spring-Website gehe. http://spring.io/guides/gs/rest-service/ Ich habe beschlossen, ein kleines Projekt zu starten, in dem das grundlegende Lernprogramm neu erstellt wird . Ich werde den Code, den ich unten geschrieben habe, veröffentlichen, damit Sie ihn sehen können. Das Problem ist, ich habe genau das gleiche Problem. Der Dienst wird ausgeführt, aber ich kann die Endpunkte nicht erreichen. Ich bin mir nicht sicher, was los ist, und ich habe andere mit ähnlichen Problemen gesehen, aber die Antworten haben bei meinen nicht angewendet/geholfen. Ich bin sicher, dass es etwas Offensichtliches ist, dass ich falsch mache, und jede Hilfe wäre sehr dankbar. Eine letzte Information, wenn überhaupt relevant, ich benutze IntelliJIDEA 15 CE als meine IDE.
Der Endpunkt, der getroffen wird:
http: // localhost: 8080/greeting
Mein Controller
@RestController
public class GreetingController
{
private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();
@RequestMapping("/greeting")
public Greeting greeting(@RequestParam(value = "name", defaultValue = "World")String name)
{
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}
Meine Ressourcendarstellungsklasse
public class Greeting
{
private final long id;
private final String content;
public Greeting(long id, String content)
{
this.id = id;
this.content = content;
}
public long getId()
{
return id;
}
public String getContent()
{
return content;
}
}
Mein Haupt
@SpringBootApplication
public class Application
{
public static void main(String[] args)
{
SpringApplication.run(Application.class, args);
}
}
Meine POM-Datei
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.Apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 http://maven.Apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.organization_name.webservices</groupId>
<artifactId>helloworld</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.3.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<properties>
<Java.version>1.8</Java.version>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-releases</id>
<url>https://repo.spring.io/libs-release</url>
</pluginRepository>
</pluginRepositories>
Befehlszeile zum Ausführen
mvn spring-boot:run
Mein komplettes Protokoll von der Konsole
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v1.3.3.RELEASE)
2016-04-23 20:47:53.153 INFO 7898 --- [ main] c.t.webservices.application.Application : Starting Application on Macintosh.local with PID 7898 (/Users/<my_user>/Downloads/B04788_Code/HelloWorld/target/classes started by <my_user> in /Users/<my_user>/Downloads/B04788_Code/HelloWorld)
2016-04-23 20:47:53.156 INFO 7898 --- [ main] c.t.webservices.application.Application : No active profile set, falling back to default profiles: default
2016-04-23 20:47:53.242 INFO 7898 --- [ main] ationConfigEmbeddedWebApplicationContext : Refreshing org.springframework.boot[email protected]68ceda24: startup date [Sat Apr 23 20:47:53 PDT 2016]; root of context hierarchy
2016-04-23 20:47:54.084 INFO 7898 --- [ main] o.s.b.f.s.DefaultListableBeanFactory : Overriding bean definition for bean 'beanNameViewResolver' with a different definition: replacing [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/ErrorMvcAutoConfiguration$WhitelabelErrorViewConfiguration.class]] with [Root bean: class [null]; scope=; abstract=false; lazyInit=false; autowireMode=3; dependencyCheck=0; autowireCandidate=true; primary=false; factoryBeanName=org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter; factoryMethodName=beanNameViewResolver; initMethodName=null; destroyMethodName=(inferred); defined in class path resource [org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration$WebMvcAutoConfigurationAdapter.class]]
2016-04-23 20:47:54.811 INFO 7898 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat initialized with port(s): 8080 (http)
2016-04-23 20:47:54.840 INFO 7898 --- [ main] o.Apache.catalina.core.StandardService : Starting service Tomcat
2016-04-23 20:47:54.841 INFO 7898 --- [ main] org.Apache.catalina.core.StandardEngine : Starting Servlet Engine: Apache Tomcat/8.0.32
2016-04-23 20:47:54.960 INFO 7898 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2016-04-23 20:47:54.960 INFO 7898 --- [ost-startStop-1] o.s.web.context.ContextLoader : Root WebApplicationContext: initialization completed in 1736 ms
2016-04-23 20:47:55.214 INFO 7898 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean : Mapping servlet: 'dispatcherServlet' to [/]
2016-04-23 20:47:55.218 INFO 7898 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'characterEncodingFilter' to: [/*]
2016-04-23 20:47:55.219 INFO 7898 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'hiddenHttpMethodFilter' to: [/*]
2016-04-23 20:47:55.219 INFO 7898 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'httpPutFormContentFilter' to: [/*]
2016-04-23 20:47:55.219 INFO 7898 --- [ost-startStop-1] o.s.b.c.embedded.FilterRegistrationBean : Mapping filter: 'requestContextFilter' to: [/*]
2016-04-23 20:47:55.545 INFO 7898 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.boot[email protected]68ceda24: startup date [Sat Apr 23 20:47:53 PDT 2016]; root of context hierarchy
2016-04-23 20:47:55.605 INFO 7898 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" 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)
2016-04-23 20:47:55.606 INFO 7898 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2016-04-23 20:47:55.628 INFO 7898 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-04-23 20:47:55.628 INFO 7898 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-04-23 20:47:55.657 INFO 7898 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2016-04-23 20:47:55.776 INFO 7898 --- [ main] o.s.j.e.a.AnnotationMBeanExporter : Registering beans for JMX exposure on startup
2016-04-23 20:47:55.848 INFO 7898 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8080 (http)
2016-04-23 20:47:55.853 INFO 7898 --- [ main] c.t.webservices.application.Application : Started Application in 3.531 seconds (JVM running for 4.702)
2016-04-23 20:48:19.521 INFO 7898 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring FrameworkServlet 'dispatcherServlet'
2016-04-23 20:48:19.521 INFO 7898 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started
2016-04-23 20:48:19.533 INFO 7898 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 12 ms
Konsolenaktualisierung nach GET-Anforderung
2016-04-23 20:48:19.521 INFO 7898 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization started
2016-04-23 20:48:19.533 INFO 7898 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : FrameworkServlet 'dispatcherServlet': initialization completed in 12 ms
Konsole nach dem Anhalten
2016-04-23 20:53:24.494 INFO 7898 --- [ Thread-2] ationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot[email protected]68ceda24: startup date [Sat Apr 23 20:47:53 PDT 2016]; root of context hierarchy
2016-04-23 20:53:24.495 INFO 7898 --- [ Thread-2] o.s.j.e.a.AnnotationMBeanExporter : Unregistering JMX-exposed beans on shutdown
Process finished with exit code 130
Nochmals vielen Dank für jede Hilfe, die Sie anbieten können. Ich werde alle über Neuigkeiten auf dem Laufenden halten!
Ich glaube, Ihr Problem hängt mit Paketen zusammen. Ihre Bewerbung ist in com.organization_name.webservices.application
definiert. Ich vermute, Ihre anderen Klassen befinden sich in einem anderen Paket, das kein untergeordnetes Element von com.organization_name.webservices.application
ist. Spring lädt automatisch Controller, die sich in demselben Paket oder in denselben Unterpaketen befinden, zum Beispiel:
com.organization_name.webservices.application
com.organization_name.webservices.application.controllers
Aber keine Pakete wie diese:
com.organization_name.webservices.controllers
Sie können dies beheben, indem Sie entweder Ihren Controller (oder Ihre Anwendung) verschieben oder ComponentScan
zu Ihrer Anwendung hinzufügen:
@SpringBootApplication
@ComponentScan(basePackageClasses=GreetingController.class)
public class Application {
Sie sollten dies in Ihrem Protokoll sehen:
Mapped "{[/greeting]}" onto public com.organization_name.webservices.xxx.Greeting com.organization_name.webservices.xxx.GreetingController.greeting(Java.lang.String)
fügen Sie in pom.xml die folgende Abhängigkeit hinzu
<dependency>
<groupId>org.Apache.Tomcat.embed</groupId>
<artifactId>Tomcat-embed-jasper</artifactId>
<scope>provided</scope>
</dependency>