首页 > 解决方案 > 运行简单服务时出现白标错误页面

问题描述

我用简单的控制器在 STS(Spring Tool Suite)中创建了 Spring Starter Project:

@RestController
public class GreetingController {

    private static final String template = "Hello, %s!";
    private final AtomicLong counter = new AtomicLong();

    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}

教程所示。

我从 IDE 运行服务,它开始正常。但是当我去 http://localhost:8080/greeting?name=User 我得到错误:

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.
Thu Oct 01 10:25:10 PDT 2020
There was an unexpected error (type=Not Found, status=404).

为什么我会收到此错误?如何解决?

UPD

添加更多日志后,我得到了错误的映射:

2020-10-02 06:17:46.078[0;39m [32mDEBUG[0;39m [35m4851[0;39m [2m---[0;39m [2m[           main][0;39m [36ms.w.s.m.m.a.RequestMappingHandlerMapping[0;39m [2m:[0;39m 2 mappings in 'requestMappingHandlerMapping'
[2m2020-10-02 06:17:46.136[0;39m [32m INFO[0;39m [35m4851[0;39m [2m---[0;39m [2m[           main][0;39m [36mo.s.b.w.embedded.tomcat.TomcatWebServer [0;39m [2m:[0;39m Tomcat started on port(s): 8080 (http) with context path ''
[2m2020-10-02 06:17:46.142[0;39m [32m INFO[0;39m [35m4851[0;39m [2m---[0;39m [2m[           main][0;39m [36mcom.example.demo.Demo1Application       [0;39m [2m:[0;39m Started Demo1Application in 1.221 seconds (JVM running for 1.934)
[2m2020-10-02 06:17:51.491[0;39m [32m INFO[0;39m [35m4851[0;39m [2m---[0;39m [2m[nio-8080-exec-1][0;39m [36mo.a.c.c.C.[Tomcat].[localhost].[/]      [0;39m [2m:[0;39m Initializing Spring DispatcherServlet 'dispatcherServlet'
[2m2020-10-02 06:17:51.493[0;39m [32m INFO[0;39m [35m4851[0;39m [2m---[0;39m [2m[nio-8080-exec-1][0;39m [36mo.s.web.servlet.DispatcherServlet       [0;39m [2m:[0;39m Initializing Servlet 'dispatcherServlet'
[2m2020-10-02 06:17:51.496[0;39m [32m INFO[0;39m [35m4851[0;39m [2m---[0;39m [2m[nio-8080-exec-1][0;39m [36mo.s.web.servlet.DispatcherServlet       [0;39m [2m:[0;39m Completed initialization in 3 ms
[2m2020-10-02 06:17:51.508[0;39m [32mTRACE[0;39m [35m4851[0;39m [2m---[0;39m [2m[nio-8080-exec-1][0;39m [36ms.w.s.m.m.a.RequestMappingHandlerMapping[0;39m [2m:[0;39m 2 matching mappings: [{ /error, produces [text/html]}, { /error}]
[2m2020-10-02 06:17:51.509[0;39m [32mTRACE[0;39m [35m4851[0;39m [2m---[0;39m [2m[nio-8080-exec-1][0;39m [36ms.w.s.m.m.a.RequestMappingHandlerMapping[0;39m [2m:[0;39m Mapped to org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController#errorHtml(HttpServletRequest, HttpServletResponse)

标签: javaspring

解决方案


如果你得到404那么显然你的控制器没有注册。如果我们缺少其他源代码,很难为您提供帮助。

也许您的控制器在外国包装中。默认情况下,Spring Boot 对主 Spring Boot 类(带@SpringBootApplication注释的类)的所有包(和子包)使用组件扫描。

要查找问题,只需添加

logging.level.org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping=TRACE

到您的application.properties并在日志中搜索greeting字符串,您应该会找到类似的内容

2020-10-01 19:49:12.610 TRACE 36840 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : 
    c.t.t.c.RootController:
    {GET /}: welcome()
    {GET /greeting}: greeting(Model)

推荐阅读