当前位置: 首页 > 知识库问答 >
问题:

@控制器不工作,但@rest控制器在Spring启动中工作

刘和昶
2023-03-14

嗨,我用spring初始化器创建了一个简单的Spring Boot应用程序。我在主应用程序类的同一文件夹中添加了一个控制器。

package com.demo.CrudOperations;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;


  @Controller
  public class RegistrationController {

      @RequestMapping(value = "/welcome", method= RequestMethod.GET )
      public String register(){
        return "registration";
    }

  }

这是给我以下错误的网址http://localhost:8080/welcome

此应用程序没有针对/错误的显式映射,因此您将其视为回退。

Sat Dec 19 12:51:44 IST 2020出现意外错误(类型=未找到,状态=404)。

如果我使用@restController而不是@Controller,它会返回给我“注册”。在我的WEB-INF视图下,我创建了registration.jsp.这是application.properties文件

 spring.mvc.view.prefix=/WEB-INF/views
 spring.mvc.view.suffix=.jsp

pom。显示未知错误的xml。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.0-SNAPSHOT</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.CrudOperations</groupId>
    <artifactId>CrudOperations</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>CrudOperations</name>
    <description>Demo project for Crud Operations</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>
        
        <!-- JSTL for JSP -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </repository>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </pluginRepository>
    </pluginRepositories>

</project>

下面是目录结构的样子

有人能告诉我哪里出错了吗?

我还尝试添加@ResponseBody,但它给了我简单的字符串,而不是jsp文件。

共有3个答案

罗星洲
2023-03-14

这种依赖性意味着您在内部为Spring boot应用程序使用Spring MVC。

 <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

因此,您需要在这里使用ModelAndView对象,该对象必须由您的方法返回,

ModelAndView是web MVC框架中模型和视图的持有者。注意,这些是完全不同的。该类仅保留这两者,以使控制器能够在单个返回值中同时返回模型和视图。表示处理程序返回的模型和视图,由DispatcherServlet解析。视图可以采用字符串视图名称的形式,该名称需要由ViewResolver对象解析;或者,可以直接指定视图对象。该模型是一个地图,允许使用按名称键控的多个对象。

有关ModelAndView的更多详细信息,请点击此处
试试这个

@RequestMapping(value = "/welcome", method= RequestMethod.GET )
  public ModelAndView register(){

    return new ModelAndView("registration");
}
傅砚
2023-03-14

我有同样的问题,我做了很多尝试,但没有一个奏效,因为,真正的问题是,叶子被禁用,application.yalm

  server:
  port: 8091
  servlet:
    session:
      timeout: 600s

spring:
  thymeleaf:
    enabled: true
  datasource:
    name: dbname  #数据库名
    url: jdbc:mysql://localhost:3306/
    username: username  #用户名
    password: password  #密码
    driver-class-name: com.mysql.cj.jdbc.Driver  #数据库链接驱动
    type: com.alibaba.druid.pool.DruidDataSource #使用druid数据源
  servlet:
    multipart:
      max-file-size: 10MB
      max-request-size: 10MB
  redis:
    port: 6379
    host: "localhost"

mybatis:
  type-aliases-package: matsk.mszdqabbs.Pojo
  mapperLocations: classpath:mapper/*.xml
  configuration:
    use-generated-keys: true
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

logging:
  pattern:
    file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"
    console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n"
  file:
    max-history: 30
    max-size: 10MB
    path: "./logs"
    name: "./logs/mszdqabbs.log"
  level:
    root: INFO

孙渝
2023-03-14

在属性末尾添加“/”:

spring.mvc.view.prefixWEB-INF视图

 类似资料:
  • 我想允许一个域的跨源请求。我的项目使用Spring,所以我想利用新的CORS支持。 我遵循下面的示例https://spring.io/blog/2015/06/08/cors-support-in-spring-framework#disqus_thread并尝试了第一个版本。我的控制器注释如下所示: 如果我理解正确的话,mvc-config是一种替代方法。我也试过了: 对于这两种方法,响应似乎

  • 我真的很难理解JavaFX控制器,我的目标是写一个TextArea来充当日志。 我的代码在下面,但我希望能够改变值等从另一个类,我可以调用时需要。我试图创建一个扩展初始化的控制器类,但我无法使它工作。有谁能指引我正确的方向吗?

  • 我有低于pom的。SpringBoot应用程序中的xml。在运行应用程序时,我没有遇到任何错误。但当我通过邮递员或浏览器点击URL时,控制器中的java代码不会被执行。 波姆。xml: 控制器: 项目执行截图: Spring Boot应用程序类: Spring启动存储库类: 将BasePackage添加为com后。下面是一个例外情况: 2022-03-21 09:51:35.169WARN 205

  • 我试图从一个非常简单的控制器重定向到位于资源/模板中的jsp页面,但我不想使用ViewResolver java配置,而是想使用应用程序属性前缀和后缀! 控制器 以下是我的应用程序属性: jsp位置为: 但我总是犯这样的错误: 白标签错误页此应用程序没有/Error的显式映射,因此您将其视为回退。 EET 2019年11月13 13:38:55日星期三出现意外错误(类型=未找到,状态=404)。没