2016-04-24 223 views
8

我正在通过spring讨论这本关于restful web服务的书。我决定放弃他们正在做的事情,并使用java配置文件。出于某种原因,切换到Java配置之后,该服务将运行(在控制台窗口中)正确,但是当我真正去到终点在localhost我得到这个:Spring问题:出现了意外的错误(type = Not Found,status = 404)

白色标签错误页面

此应用程序没有明确的映射/错误,因此您将此视为 作为后备。

Sat Apr 23 20:48:25 PDT 2016有一个意外的错误(type = Not Found,status = 404)。没有可用的消息

这是从GET请求的响应:

{ 
    "timestamp": 1461470029110, 
    "status": 404, 
    "error": "Not Found", 
    "message": "No message available", 
    "path": "/greeting" 
} 

这个故事的下一章开始,我要去入门页面春节网站http://spring.io/guides/gs/rest-service/上,我决定开始一个小项目重新创建他们的基本教程。我将发布我在下面写的代码供您查看。问题是,我有完全相同的问题。该服务运行但我不能击中端点。我不确定发生了什么,我也看到有类似问题的其他人,但答案并没有适用/帮助我。我相信这是明显的,我做错了,任何帮助将不胜感激。最后一条信息,如果相关的话,我使用IntelliJ IDEA 15 CE作为我的IDE。

端点被击中:

http://localhost:8080/greeting

我控制器

@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)); 
     } 
    } 

我的资源表示类

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; 
     } 
    } 

我的主要

@SpringBootApplication 
public class Application 
{ 
    public static void main(String[] args) 
    { 
     SpringApplication.run(Application.class, args); 
    } 
} 

我的POM文件

<?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.trammel.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> 

命令行从控制台运行

mvn spring-boot:run 

我的完整的日志

. ____   _   __ _ _ 
/\\/___'_ __ _ _(_)_ __ __ _ \ \ \ \ 
(()\___ | '_ | '_| | '_ \/ _` | \ \ \ \ 
\\/ ___)| |_)| | | | | || (_| | )))) 
    ' |____| .__|_| |_|_| |_\__, |//// 
=========|_|==============|___/=/_/_/_/ 
:: Spring Boot ::  (v1.3.3.RELEASE) 

2016-04-23 20:47:53.153 INFO 7898 --- [   main] c.t.webservices.application.Application : Starting Application on Trammels-Macintosh.local with PID 7898 (/Users/trammelmay/Downloads/B04788_Code/HelloWorld/target/classes started by trammelmay in /Users/trammelmay/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 

控制台更新后的GET请求

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 

控制台再次停止

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 

感谢您可以提供任何帮助后。我会保持每个人都张贴更新!

+0

只要是明确的 - 你所看到的白色标签错误页面,当你去到http://本地主机:8080 /问候或只是HTTP:/ /本地主机:8080?当我转到http:// localhost:8080时,我看到了相同的情况,但是当我进入/ greeting时,它工作得很好。 – markwatsonatx

+0

好问题,我应该更清楚了。是的,GET是朝向端点本身,localhost:8080/greeting 我更新了问题以反映现在:) – tramstheman

回答

25

我相信你的问题与软件包有关。您的申请在com.trammel.webservices.application中定义。我猜你的其他课程是在不是com.trammel.webservices.application的孩子的其他课程中。 Spring会自动加载控制器,都在同一个包或子包,例如:

​​

但不包这样的:

com.trammel.webservices.controllers 

您可以通过移动控制器解决这个问题(或应用程序),或添加ComponentScan到您的应用程序:

@SpringBootApplication 
@ComponentScan(basePackageClasses=GreetingController.class) 
public class Application { 

你应该在你的日志中看到的是:

Mapped "{[/greeting]}" onto public com.trammel.webservices.xxx.Greeting com.trammel.webservices.xxx.GreetingController.greeting(java.lang.String) 
+0

这正是问题所在,非常敏锐的目光。我知道它必须是这样一些非常明显的东西。 – tramstheman

+0

准确地说,我的问题也是。感谢这个答案。 – virusrocks

0

在pom.xml中添加以下依赖

 <dependency> 
     <groupId>org.apache.tomcat.embed</groupId> 
     <artifactId>tomcat-embed-jasper</artifactId> 
     <scope>provided</scope> 
    </dependency> 
相关问题