intellij-idea @来自Spring Boot的请求Map(“/”)仅返回404页

lymgl2op  于 2022-11-01  发布在  Spring
关注(0)|答案(4)|浏览(157)

在 Spring 启动中,任何URL都没有问题,例如localhost:8080/anything,但只有默认URL才有问题,例如localhost:8080/或localhost:8080。
IDE当前正在使用Intellij。
我试图抓取断点来尝试调试,但是我一开始并没有运行那个方法
在调试过程中,确认是否生成了bean,但确认生成了bean没有问题。
我试图抓取断点来尝试调试,但是我一开始并没有运行那个方法
在调试过程中,确认是否生成了bean,但确认生成了bean没有问题。

@Slf4j
@Controller
public class HomeController {
    @RequestMapping("/")
    public String index(){
        return "index";
    }
}

它工作正常。无论设置了什么URI,它都工作正常。

@Slf4j
    @Controller
    public class HomeController {
        @RequestMapping("/anyting")
        public String index(){
            return "index";
        }
    }

我的酱汁如下我应该检查什么?
提前感谢您的帮助。

8dtrkrch

8dtrkrch1#

试试看,它能起作用:

@Slf4j
@Controller
public class HomeController {
    @GetMapping("")
    public String index(){
        return "index";
    }
}
np8igboo

np8igboo2#

您可以尝试以下方法:
1)将@控制器与@响应主体一起使用

@Controller用于将类标记为Spring MVC控制器。如果您只使用@Controller,则必须在每个API方法中指定@ResponseBody

@Controller
@Slf4j
public class HomeController {

  @RequestMapping("/")
  @ResponseBody
  public String index() {
    return "index";
  }

  @RequestMapping("/anything")
  @ResponseBody
  public String index2() {
    return "index";
  }

}

**输出:**上述代码将返回“index”字符串作为此API的响应。

如果你想显示index.html页面,那么你必须修改你的代码如下,请注意你的index.html应该放在resources/static文件夹

@RequestMapping("/")
@ResponseBody
  public ModelAndView index() {
    return new ModelAndView("index.html");
  }

**输出:**这会将您重定向到index.html页面。
2)在静止控制器上使用

@RestController注解是RESTful Web服务中使用得一个特殊得控制器,它是@Controller和@ResponseBody注解得组合,是@Component注解得一个特殊版本。

@RestController
@Slf4j
public class HomeController {

  @RequestMapping("/")
  public String index() {
    return "index";
  }

  @RequestMapping("/anything")
  public String index2() {
    return "index";
  }
}

**输出:**上述代码将返回“index”字符串作为此API的响应。

如果你想显示index.html页面,那么你必须修改你的代码如下,请注意你的index.html应该放在resources/static文件夹

@RequestMapping("/")
  public ModelAndView index() {
    return new ModelAndView("index.html");
  }

**输出:**这会将您重定向到index.html页面。

d7v8vwbk

d7v8vwbk3#

谢谢大家回答我的问题。
但我身上没有解药。
相反,我们将用另一种方式来解决它,并与您分享。
@xerx593的第一个字,我得到了一个提示,告诉我将日志级别设置为调试。

2022-10-13 16:54:01.710 DEBUG 79836 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : GET "/", parameters={}
2022-10-13 16:54:01.712 DEBUG 79836 --- [nio-8080-exec-1] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped to ParameterizableViewController [view="forward:/index"]
2022-10-13 16:54:01.724 DEBUG 79836 --- [nio-8080-exec-1] o.s.w.s.v.ContentNegotiatingViewResolver : Selected 'text/html' given [text/html, application/xhtml+xml, image/avif, image/webp, image/apng, application/xml;q=0.9, application/signed-exchange;v=b3;q=0.9, */*;q=0.8]
2022-10-13 16:54:01.724 DEBUG 79836 --- [nio-8080-exec-1] o.s.w.servlet.view.InternalResourceView  : View name 'forward:', model {}
2022-10-13 16:54:01.725 DEBUG 79836 --- [nio-8080-exec-1] o.s.w.servlet.view.InternalResourceView  : Forwarding to [/index]
2022-10-13 16:54:01.728 DEBUG 79836 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : "FORWARD" dispatch for GET "/index", parameters={}
2022-10-13 16:54:01.734 DEBUG 79836 --- [nio-8080-exec-1] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped to ResourceHttpRequestHandler [classpath [static/], classpath [public/], classpath [], classpath [resources/], classpath [META-INF/resources/], classpath [META-INF/resources/webjars/]]
2022-10-13 16:54:01.736 DEBUG 79836 --- [nio-8080-exec-1] o.s.w.s.r.ResourceHttpRequestHandler     : Resource not found
2022-10-13 16:54:01.736 DEBUG 79836 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Exiting from "FORWARD" dispatch, status 404
2022-10-13 16:54:01.740 DEBUG 79836 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed 404 NOT_FOUND

(将日志导入到代码段中以供查看。)
如果您检查日志并接近“/",则会将其转发到“/index”。
所以我修改了代码来接收“/index”并处理它。

@Slf4j
@Controller
public class HomeController {
    @RequestMapping("/index")
    public String index(){
        return "index";
    }
}

对我有用。

  • 谢谢-谢谢
bkhjykvo

bkhjykvo4#

问题:

不确定/无法报告!
要实现:在“default spring-starter-web-thymeleaf”中从对<context_root>/的请求中服务templates/index.html

溶液:

1.删除此控制器(如果它只返回视图)
1.在<project_root>/src/main/resources/templates/index.html处放置一个(百里香叶)视图(例如:

<!DOCTYPE HTML>
 <html xmlns:th="http://www.thymeleaf.org">
 <head> 
     <title>Hello</title> 
     <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
 </head>
 <body>
     <p>Hello, [[${param.name}?:'Dear']]!</p>
 </body>
 </html>

1.发出http://localhost:8080/将为我们提供:

当管理员 * 执行 * 一些额外BL时

我可以这样做:

@Controller ... class ... { // @RestController returns rather a "response body" than the "view name".
  @RequestMapping("/"/*, add more here!?*/) // !
  public String index(/*...*/){
    // do something useful..., then:
    return "index";
  }
}

相关问题