我的 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/