gpt4 book ai didi

无法调用 Spring Boot @Controller,但 @RestController 有效

转载 作者:行者123 更新时间:2023-12-04 01:39:19 24 4
gpt4 key购买 nike

我的 Controller 已被@Controller 注释,无法调用
- 浏览器显示

There was an unexpected error (type=Not Found, status=404).



但是,如果它是用@RestController 注释的,那么它就可以工作。我的 SpringBoot 版本:1.5.3.RELEASE

我的 Controller :(在 com.sbootsecurityjsp.controller 中)
@Controller
public class LoginController {
@RequestMapping(value = "/login", method= RequestMethod.GET )
public String login() {
return "Login Controller";
}
}

主类:(在 com.sbootsecurityjsp 中)
@SpringBootApplication(scanBasePackages = {"com.sbootsecurityjsp"}) 
public class SbootSecurityJspApplication {
public static void main(String[] args) {
SpringApplication.run(SbootSecurityJspApplication.class, args);
}
}

如果@RestController 注释有效,我很好奇为什么@Controller 不能工作。如果组件扫描不起作用,@RestController 也不应该起作用。我已添加 scanbasePackages也。即使没有 scanbasePackages , 这是行不通的。

顺便说一句,当应用程序启动时,日志还显示如下一行:
INFO 532 --- [  restartedMain] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/login],methods=[GET]}" onto public java.lang.String com.sbootsecurityjsp.controller.LoginController.login()

为什么使用@Controller 是为了区分对页面的请求和休息调用。如果我错了,请纠正我。我的想法是将 @RestController 用于 REST 请求,另一方面,@Controller 用于与页面相关的请求——重定向到 JSP 或与 View 相关的任何逻辑。这是一种不好的做法吗?

最佳答案

为什么在我使用 @Controller 注释时会返回 404?

使用时@Controller ,春料String你回来 @RequestMapping方法来对应您要将用户重定向到的页面。

@RequestMapping(value = "/login", method= RequestMethod.GET )
public String login() {
return "Login Controller";
}

在这里,Spring 会尝试将用户重定向到 Login Controller.jsp ,无法找到,因此返回 404 .

为什么我使用@RestController 时不返回 404

使用时 @RestController , String您返回的内容未映射到任何页面。相反,Spring 只是将其转换为例如一个 JSON 响应。这就是为什么这不会给你一个 404 .

建议的解决方案

如果您有一个名为 login.jsp 的 jsp 页面, 只需返回 "login" :
@RequestMapping(value = "/login", method= RequestMethod.GET )
public String login() {
return "login";
}

关于无法调用 Spring Boot @Controller,但 @RestController 有效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47938354/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com