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

标签 spring spring-boot

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

相关文章:

Spring 集成: Send response to client http inbound gateway

java - 404异常中的Spring自定义消息

java - Spring-Hibernate 中的每个线程都应该有一个 EntityManager 吗?

java - 如何使用 JPA 以编程方式创建长度有限的 MySQL 索引?

java - 在运行时动态更新规则。流口水 + Spring Boot

java - 我如何使用 Kickstart Spring Boot GraphQL 在逻辑上拆分我的 GraphQL 模式和解析器

java - 如何将隐藏值从 Thymeleaf 模板传递到 Controller (Spring Boot)?

java - SpringBoot 2 - 监控数据库连接

java - @EnableDiscoveryClient spring Boot 服务注册

spring - 无法解析占位符