簡體   English   中英

@controller 不工作但@restcontroller 在 spring 啟動時工作

[英]@controller not working but @restcontroller working in spring boot

您好,我已經使用 spring initializr 創建了簡單的 spring 啟動應用程序。 我在主應用程序 class 的同一文件夾中添加了一個 controller。

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";
    }

  }

這給我以下錯誤 url http://localhost:8080/welcome

Whitelabel Error Page 此應用程序沒有明確的 /error 映射,因此您將其視為后備。

12 月 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 文件。

在屬性末尾添加“/”:

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

我遇到了同樣的問題,我做了很多嘗試,但都沒有成功,因為真正的問題是,theamleaf 被禁用了,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

這種依賴關系意味着您在內部使用 Spring MVC 為您的 spring 啟動應用程序。

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

所以你需要在這里使用必須由你的方法返回的ModelAndView object,

ModelAndView 是 web MVC 框架中 Model 和 View 的持有者。 請注意,這些是完全不同的。 此 class 僅包含兩者,以使 controller 返回 model 和查看單個返回值成為可能。 表示由處理程序返回的 model 和視圖,由 DispatcherServlet 解析。 視圖可以采用字符串視圖名稱的形式,需要由 ViewResolver object 解析; 或者,可以直接指定 View object。 model 是 Map,允許使用按名稱鍵控的多個對象。

有關 ModelAndView 的更多詳細信息,請點擊此處
嘗試這個

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

    return new ModelAndView("registration");
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM