此应用程序没有/ error的显式映射

时间:2015-06-30 09:22:45

标签: spring spring-mvc file-upload upload

我用maven做教程https://spring.io/guides/gs/uploading-files/
我使用的所有代码都被复制了。

应用程序可以运行,但我收到错误:

  

Whitelabel错误页面此应用程序没有/ error的显式映射,因此您将此视为回退。   Tue Jun 30 17:24:02 CST 2015出现意外错误(type = Not Found,status = 404)。   没有可用的消息

我该如何解决?

47 个答案:

答案 0 :(得分:92)

确保您的主类位于其他类之上的根包中。

当您运行Spring Boot Application(即使用@SpringBootApplication注释的类)时,Spring将只扫描主类包下面的类。

com
   +- APP
         +- Application.java  <--- your main class should be here, above your controller classes
         |
         +- model
         |   +- user.java
         +- controller
             +- UserController.java

答案 1 :(得分:41)

当我们创建Spring启动应用程序时,我们使用@SpringBootApplication注释对其进行注释。此注释“包装”了许多其他必要的注释,以使应用程序正常工作。一个这样的注释是@ComponentScan注释。这个注释告诉Spring查找Spring组件并配置要运行的应用程序。

您的应用程序类需要位于包层次结构的顶层,以便Spring可以扫描子包并找出其他所需的组件。

package com.test.spring.boot;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {
    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }
}

以下代码段有效,因为控制器包位于com.test.spring.boot

package com.test.spring.boot.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

    @RequestMapping("/")
    public String home(){
        return "Hello World!";
    }
}

以下代码段不起作用,因为控制器包不在com.test.spring.boot

package com.test.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

     @RequestMapping("/")
     public String home(){
         return "Hello World!";
     }
 }

从Spring Boot文档:

  

许多Spring Boot开发人员总是对其主类进行注释   使用@Configuration@EnableAutoConfiguration@ComponentScan。   由于这些注释经常被一起使用(特别是如果   你遵循上面的最佳实践),Spring Boot提供了一个   方便的@SpringBootApplication替代方案。

     

@SpringBootApplication注释等同于使用   @Configuration@EnableAutoConfiguration@ComponentScan与他们合作   默认属性

答案 2 :(得分:35)

您可以在应用中添加ErrorController来解决此问题。您可以让错误控制器返回您需要的视图。

我的应用程序中的错误控制器如下所示:

import org.springframework.boot.autoconfigure.web.ErrorAttributes;
import org.springframework.boot.autoconfigure.web.ErrorController;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

/**
 * Basic Controller which is called for unhandled errors
 */
@Controller
public class AppErrorController implements ErrorController{

    /**
     * Error Attributes in the Application
     */
    private ErrorAttributes errorAttributes;

    private final static String ERROR_PATH = "/error";

    /**
     * Controller for the Error Controller
     * @param errorAttributes
     */
    public AppErrorController(ErrorAttributes errorAttributes) {
        this.errorAttributes = errorAttributes;
    }

    /**
     * Supports the HTML Error View
     * @param request
     * @return
     */
    @RequestMapping(value = ERROR_PATH, produces = "text/html")
    public ModelAndView errorHtml(HttpServletRequest request) {
        return new ModelAndView("/errors/error", getErrorAttributes(request, false));
    }

    /**
     * Supports other formats like JSON, XML
     * @param request
     * @return
     */
    @RequestMapping(value = ERROR_PATH)
    @ResponseBody
    public ResponseEntity<Map<String, Object>> error(HttpServletRequest request) {
        Map<String, Object> body = getErrorAttributes(request, getTraceParameter(request));
        HttpStatus status = getStatus(request);
        return new ResponseEntity<Map<String, Object>>(body, status);
    }

    /**
     * Returns the path of the error page.
     *
     * @return the error path
     */
    @Override
    public String getErrorPath() {
        return ERROR_PATH;
    }


    private boolean getTraceParameter(HttpServletRequest request) {
        String parameter = request.getParameter("trace");
        if (parameter == null) {
            return false;
        }
        return !"false".equals(parameter.toLowerCase());
    }

    private Map<String, Object> getErrorAttributes(HttpServletRequest request,
                                                   boolean includeStackTrace) {
        RequestAttributes requestAttributes = new ServletRequestAttributes(request);
        return this.errorAttributes.getErrorAttributes(requestAttributes,
                includeStackTrace);
    }

    private HttpStatus getStatus(HttpServletRequest request) {
        Integer statusCode = (Integer) request
                .getAttribute("javax.servlet.error.status_code");
        if (statusCode != null) {
            try {
                return HttpStatus.valueOf(statusCode);
            }
            catch (Exception ex) {
            }
        }
        return HttpStatus.INTERNAL_SERVER_ERROR;
    }
}

上述课程基于Springs BasicErrorController课程。

您可以在ErrorController文件中实例化上述@Configuration

 @Autowired
 private ErrorAttributes errorAttributes;

 @Bean
 public AppErrorController appErrorController(){return new AppErrorController(errorAttributes);}

您可以选择通过实施ErrorAttributes覆盖默认ErrorAttributes。但在大多数情况下,DefaultErrorAttributes就足够了。

答案 3 :(得分:10)

在我的情况下,因为包位置,意味着控制器的包必须在主类包

之上

如果我的主类包是package co.companyname.spring.tutorial;,任何控制器包都应该package co.companyname.spring.tutorial.WHAT_EVER_HERE;

package co.companyname.spring.tutorial; // package for main class
@SpringBootApplication
public class FirstProjectApplication {

    public static void main(String[] args) {
        SpringApplication.run(FirstProjectApplication.class, args);
    }
}


package co.companyname.spring.tutorial.controllers; // package for controllers 

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController 
public class HelloController { 

@RequestMapping("/hello")  
public String hello() {   
 return "Hello, world"; 
 }}

完成编码后按启动仪表板

enter image description here

要确保你的控制器是映射的最后一件事,或者只是控制台你应该看到某些smilliar

Mapped "{[/hello]}" onto public java.lang.String co.companyname.spring.tutorial.controllers.HelloController.hello()

快乐编码

答案 4 :(得分:7)

在我的例子中,控制器类用@Controller注释。将其更改为@RestController即可解决问题。 基本上@RestController@Controller + @ResponseBody 因此,对每种方法使用@RestController@Controller@ResponseBody注释。

这里有一些有用的注释:https://www.genuitec.com/spring-frameworkrestcontroller-vs-controller/

答案 5 :(得分:6)

尝试添加依赖项。

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

答案 6 :(得分:5)

默认情况下,Spring Boot将扫描当前程序包以获取bean定义。因此,如果当前定义主类的程序包和控制器程序包不相同或控制器程序包不是主应用程序程序包的子程序包,则它将不会扫描控制器。为了解决这个问题,可以在主程序包中包含用于bean定义的程序包列表

@SpringBootApplication(scanBasePackages = {"com.module.restapi1.controller"})

或创建一个包层次结构,其中子包是从主包派生的

package com.module.restapi;
package com.module.restapi.controller

答案 7 :(得分:5)

未定义显式错误页面时会发生这种情况。要定义错误页面,请创建带有视图的/ error映射。 例如下面的代码映射到发生错误时返回的字符串值。

package com.rumango.controller;

import org.springframework.boot.web.servlet.error.ErrorController;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class IndexController implements ErrorController{
    private final static String PATH = "/error";
    @Override
    @RequestMapping(PATH)
    @ResponseBody
    public String getErrorPath() {
        // TODO Auto-generated method stub
        return "No Mapping Found";
    }

}

答案 8 :(得分:4)

在主类中,在配置&#34; @ SpringBootApplication&#34;之后,添加&#34; @ComponentScan&#34;没有任何争论,为我工作!!!

主类:

@SpringBootApplication
@ComponentScan
public class CommentStoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(CommentStoreApplication.class, args);

    }
}

RestController类:

@RestController
public class CommentStoreApp {

    @RequestMapping("/") 
    public String hello() {
        return "Hello World!";
    }
}

P.S:在启动应用程序之前,不要错过运行mvn clean和mvn install命令

答案 9 :(得分:4)

我添加了这个依赖项,它解决了我的问题。

<dependency>
    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

答案 10 :(得分:3)

您可能会收到错误,即

“此应用程序没有/ error的显式映射,因此您将此视为后备。”

这是因为它没有扫描您的控制器和放大器。您必须在main()类中指定的服务类,如下所示,

@Component({ ... })
export class EventComponent implements OnInit {
    posts = [];
    filteredPosts = [];

    constructor(private searchPipe: SearchPipe) {}

    ngOnInit() {
        this.posts = ...;

        this.form.search.valueChanges.subscribe((value) => {
            this.filteredPosts = this.searchPipe.transform(this.posts, 'name', value);
        });
    }
}

注意:在这里,我已经指定了各种类,如演示,控制器和服务,只有它才能正常工作。

答案 11 :(得分:2)

我正在开发几周的Spring Boot应用程序..而且我和gettig一样错误如下;

  

Whitelabel错误页面   此应用程序没有/ error的显式映射,因此您将此视为回退。   Thu Jan 18 14:12:11 AST 2018   出现意外错误(type = Not Found,status = 404)。   没有可用的消息

当我得到这个错误按摩时,我意识到我的控制器或其他控制器类是在我的项目中定义的注释。 我的意思是我们所有的控制器包与主类都不一样,包括@SpringBootApplication注释.. 我的意思是你需要将控制器包的名称添加到@ComponentScan注释到你的主类@inlude @ SpringBootApplication注释。如果您编写下面的代码,您的问题就会解决... 最重要的是您必须将所有控制器的包添加到@ComponentScan注释中,就像我在下面所做的那样

package com.example.demo;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

@SpringBootApplication
@ComponentScan({ "com.controller.package1, com.controller.package2, com.controller.package3, com.controller.packageN", "controller", "service" } // If our Controller class or Service class is not in the same packages we have //to add packages's name like this...directory(package) with main class
public class MainApp {
    public static void main(String[] args) {
        SpringApplication.run(MainApp.class, args);
    }
}

我希望这些代码可以帮助别人......

如果您找到另一种方法来解决此错误,或者您对我有一些建议, 请写评论......谢谢......

答案 12 :(得分:2)

晚会很晚。根据Spring的官方文档,“如果遇到服务器错误,Spring Boot将安装在浏览器客户端中看到的whitelabel错误页面。” https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page

  1. 您可以通过在 application.yml application.properties 文件中设置server.error.whitelabel.enabled=false来禁用该功能。

2. 推荐方式设置了您的错误页面,以便最终用户可以理解。在 resources / templates 文件夹下,创建一个 error.html 文件,并在 pom.xml 文件

中添加依赖项。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

Spring将自动选择error.html页面作为默认错误模板。 注意:-添加依赖项后,不要忘记更新Maven项目。

答案 13 :(得分:2)

问题是您正在导航到localhost:8080 /而不是localhost:8080 / upload,如指南中所述。当您导航到未定义的路由时,Spring Boot有一个默认的错误页面,以避免泄露服务器特定的详细信息(可以将其视为安全风险)。

您可以选择:访问右侧页面,添加自己的目标网页,或override the white error page

为了简化这种特殊情况,我更新了指南,以便它使用/而不是/ upload。

答案 14 :(得分:1)

您必须组织这些软件包,以便包含公共静态main(或您在其中编写@SpringBootApplication的位置)的软件包成为所有其他软件包的父亲。

答案 15 :(得分:1)

我知道这不是问题的答案,但这个问题首先出现在Google上:)

在尝试访问Swagger UI时出现问题(&#34;此应用程序没有/ error&#34;的显式映射)。

在我的情况下,问题是由@RestController(&#34; / endpoint&#34;)引起的,并没有被swagger正确处理。

所以,这导致了错误:

@RestController("/endpoint")
public class EndpointController {

这很好

@RestController
@RequestMapping("/endpoint")
public class EndpointController {

答案 16 :(得分:1)

您可能没有在 pom.xml 文件中包含 thymleaf。

答案 17 :(得分:0)

我需要提到这种方式,并提供对软件包的引用,并且可以解决问题。您可以排除@EnableAutoConfiguration此注释,但是我需要绕过任何与数据库相关的依赖关系。

@SpringBootApplication
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class})
@ComponentScan(basePackages = {"your package 1", "your package2"})

public class CommentStoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(CommentStoreApplication.class, args);

    }
}

答案 18 :(得分:0)

确保依赖项列表中包含jasper和jstl:

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jstl</artifactId>
</dependency>

这是一个正在运行的入门项目-https://github.com/spring-projects/spring-boot/tree/master/spring-boot-samples/spring-boot-sample-web-jsp

作者:Biju Kunjummen

答案 19 :(得分:0)

有时候您的spring应用无法找到spring组件,并且没有在sprint容器中初始化它,您可以使用@ComponentScan以及@SpringBootApplication来添加组件,如下例

@SpringBootApplication
@ComponentScan({"model", "service"})
class MovreviewApplication {

                public static void main(String[] args) {
        SpringApplication.run(MovreviewApplication.class, args);

}

在上面的示例模型和服务中是我应用程序中的软件包。

答案 20 :(得分:0)

如果已使用requestMapping注释接口,请确保还使用@Component注释实现接口的类。

答案 21 :(得分:0)

我遇到了同样的问题,使用gradle并通过添加以下依赖项得到解决-

compile('org.springframework.boot:spring-boot-starter-data-jpa')
compile('org.springframework.boot:spring-boot-starter-web')
testCompile('org.springframework.boot:spring-boot-starter-test')
compile('org.apache.tomcat.embed:tomcat-embed-jasper')

之前,我错过了最后一个导致相同错误的事件。

答案 22 :(得分:0)

如果所有配置均正确完成 (如该问题的前两个三个答案中所述),您仍然会收到“ Whitelabel Error Page”。此应用程序没有/错误的显式映射,那么此解决方案可能会对您有所帮助

有时在配置之外,问题也可能来自代码方面。 您可能错过了一些基本的知识。
要确定问题,您需要检查跟踪,为此,请按照以下步骤操作

打开终端。
1)cd project_location,获取项目位置。
例如eclipse->项目(右键单击)->属性->资源(标签)->针对位置字段复制路径。
2)然后运行脚本 ./ mvnw spring-boot:run

然后转到http://localhost:8080/http://localhost:8080/xyz,无论您使用哪个期望数据的URL。单击链接后,跟踪都会被更新。

我遇到类似
的错误 2020-05-23 06:52:42.405 错误 3512-[nio-8080-exec-1] oaccC [。[。[/]。[dispatcherServlet]:Servlet.service()路径为[]的上下文中的servlet [dispatcherServlet]引发了异常[请求处理失败;嵌套的异常是org.springframework.orm.jpa.JpaSystemException:实体的默认构造函数:com.ibsplc.com.payroll.model.Employee;嵌套的异常是org.hibernate.InstantiationException:没有默认的实体构造函数:com.ibsplc.com.payroll.model.Employee],其根本原因是

因此,我为Employee模型添加了默认构造函数。 将项目作为maven-build运行 然后运行脚本./mvnw spring-boot:run,
它对我有用

答案 23 :(得分:0)

主类必须位于应用包树形结构的外部之外。例如: example

答案 24 :(得分:0)

确保在@SpringBootApplication之后立即添加@RestController批注。 RestController注释告诉Spring,此代码描述了应该在Web上可用的端点。

答案 25 :(得分:0)

我在对我的 Web 应用程序使用 Keycloak 身份验证时遇到此错误。我找不到关于 Keycloak 的答案,所以想发帖,因为它可以帮助其他人。

我遇到了这个错误

This application has no explicit mapping for /error, so you are seeing this as a fallback.

因为我在 Java 应用程序资源的 application.properties 文件中使用了属性 keycloak.bearer-only=true。这将确保无法从浏览器登录,因此我们需要使用令牌。我删除了这个命令,它在浏览器中工作。

如果您使用命令 keycloak.bearer-only=true 并尝试使用浏览器访问应用程序,那么您可能会遇到同样的问题。

答案 26 :(得分:0)

就我而言,我遇到了这个问题,因为我的服务器已经从执行 UploadingFilesApplication.java(带有 @SpringBootApplication 注释的文件)开始运行。

我通过执行 FileUploadController.java(带有 @Controller 批注的文件)重新运行服务器解决了这个问题。

答案 27 :(得分:0)

我遇到了类似的问题。我在所有控制器的顶部都有 Main.class,但我遇到了这个问题。我需要做的就是创建一个单独的 swagger 配置文件并在其中初始化 docket bean。

注意:该文件的位置应该在 Main.class 文件的同一个包中,或者在该主包内的一个包中。

SwaggerConfiguration.java 文件

package com.example.springDataJPAUsingGradle;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;

@Configuration
@EnableSwagger2
public class SwaggerConfig {
    @Bean
    public Docket docket() {
        return new Docket(DocumentationType.SWAGGER_2).select().build();
    }
}

我还必须在我的 controller.java 中添加 @RequestMapping("/api")。 方法如下:

package com.example.springDataJPAUsingGradle.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import com.example.springDataJPAUsingGradle.service.StudentService;

@RestController
@RequestMapping("/api")
public class StudentController {

    @Autowired(required = true)
    @GetMapping("/home")
    public String home() {
        return "Welcome to home page";
    }
}

然后在点击 url 后:http://localhost:9090/your-app-root/swagger-ui/ swagger UI 将可见。 例如,就我而言,网址是:http://localhost:9090/students/swagger-ui/

答案 28 :(得分:0)

我在学习 Spring HATEOAS 时遇到了这个问题。我检查了上面给出的所有答案,但问题没有解决。最后,我将我的控制器类粘贴到“main application.java”包中,它对我有用。[![你可以在图片中看到我将我的控制器类和主类添加到一个包中。您还可以在同样适用于我的包中添加“模型类、主类和控制器类”。在下图中,我在同一个包中添加了控制器和主类。

Project Structure

答案 29 :(得分:0)

除了上面所有很酷的答案。只需检查该方法的请求映射是否可用。这是一个示例代码。

@RestController
@RequestMapping("api/v1/data")
public class SampleController {

  private final SampleService sampleService;

  @Autowired
  public SampleController(SampleService sampleService) {
    this.sampleService= sampleService;
  }

  @GetMapping
  public List<SimpleData> getData() {
    return sampleService.getData();
  }
}

您可能会忘记在 @GetMapping 方法中添加 getData

答案 30 :(得分:0)

请确保您未将View或JSP或HTML放在WEB-INF或META-INF中

请仔细注意以下细节:

spring.mvc.view.prefix
spring.mvc.view.suffix

答案 31 :(得分:0)

我所做的就是解决这类问题,就是在MVCConfig Class中提到 @Configuration

喜欢这个:

package com.example;

/**
 * Created by sartika.s.hasibuan on 1/10/2017.
 */
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@EnableAutoConfiguration
@Configuration
@ComponentScan
public class MvcConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/home").setViewName("home");
        registry.addViewController("/").setViewName("home");
        registry.addViewController("/hello").setViewName("hello");
        registry.addViewController("/login").setViewName("login");
    }

}

答案 32 :(得分:0)

我有类似的错误,我使用spring boot和velocity,我的解决方法是检查文件application.properties,spring.velocity.toolbox-config-location发现此属性错误

答案 33 :(得分:0)

在我的情况下,在使用maven首先运行SpringApplication后,在IntelliJ中运行SpringApplication时会出现此问题。

要解决问题,我先运行mvn clean。然后我从IntelliJ中运行SpringApplication。

答案 34 :(得分:0)

在控制器类中将@Controller更改为@RestController,一切都应该顺利进行。

答案 35 :(得分:0)

确保您的Main。应位于您的控制器之上。如果是以下示例:

Main.class包含:

@SpringBootApplication
public class Main {
    public static void main(String[] args) {
        SpringApplication.run(Main.class, args);
    }
}

EmployeeController。包含:

@RestController
public class EmployeeController {
    @InitBinder
    public void setAllowedFields(WebDataBinder dataBinder) {
        dataBinder.setDisallowedFields("id");
    }

    @RequestMapping(value = "/employee/save", method = RequestMethod.GET)
    public String save(){
        Employee newEmp = new Employee();
        newEmp.setAge(25);
        newEmp.setFirstName("Pikachu");
        newEmp.setId(100);
        return "Name: " + newEmp.getFirstName() + ", Age: " + newEmp.getAge() + ", Id = " + newEmp.getId();
    }
}

如果您的主类位于根文件夹中,就像这条路径一样: {projectname} / src / main / java / main 然后确保您的控制器位于您的下方主要课程。例如 {projectname} / src / main / java / main / controllers

答案 36 :(得分:0)

在你的java文件(比如:Viper.java)中有主要的类添加:“@ RestController” @RequestMapping(“/”)

@SpringBootApplication
@RestController
public class Viper {

  @RequestMapping("/")

   public String home(){
          return "This is what i was looking for";                      
     }

public static void main( String[] args){

   SpringApplication.run(Viper.class , args);
}

}

答案 37 :(得分:0)

检查是否已使用 @RestController 注释标记了控制器类。

答案 38 :(得分:0)

这意味着您正在尝试访问不存在的页面。 假设您的jsp文件位于/webapp/home.jsp,如果您在代码上使用@RequestMapping(&#34; / home&#34;)并返回&#34; home.jsp&#34 ;;如果你尝试使用localhost:port /访问你会得到这个错误但是如果你尝试localhost:port / home就没有错误 你可以通过检查你试图访问的页面的@RequestMapping(&#34; /&#34;)这里put / mapping_path来解决这个问题。 您还可以尝试从maven依赖

添加tomcat jaspher的依赖项

答案 39 :(得分:0)

我遇到了这个问题,然后后来意识到我在@Configuration类中缺少MvcConfig批注,该批注基本上是为ViewControllerssetViewNames进行映射的。 / p>

这是文件的内容:

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
**@Configuration**
public class MvcConfig implements WebMvcConfigurer{
   public void addViewControllers(ViewControllerRegistry registry)
   {
      registry.addViewController("/").setViewName("login");
      registry.addViewController("/login").setViewName("login");
      registry.addViewController("/dashboard").setViewName("dashboard");
   }
}

希望这对某人有帮助!

答案 40 :(得分:0)

在教程中,控制器带有@Controller注释,该@Controller用于创建模型对象的Map和查找视图,但是@RestController只是返回对象,并且对象数据直接以JSON或XML的形式写入HTTP响应中。 如果要查看响应,请使用 @RestController 或将 @ResponseBody 与@Controller一起使用。

@Controller
@ResponseBody

了解更多:https://javarevisited.blogspot.com/2017/08/difference-between-restcontroller-and-controller-annotations-spring-mvc-rest.html#ixzz5WtrMSJHJ

答案 41 :(得分:0)

如果您忘记了控制器类顶部的@RestController批注,则会发生这种情况 import导入org.springframework.web.bind.annotation.RestController;

并添加如下注释

请参阅下面的简单示例

import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.RequestMapping;


@RestController
public class HelloController {
@RequestMapping("/")
    public String index() {
        return "Greetings from Spring Boot!";
    }

}

答案 42 :(得分:0)

使用Spring Boot和application.properties文件,我必须更改项目的结构。 JSP文件应位于以下位置: \ src \ main \ resources \ META-INF \ resources \ WEB-INF \ jsp。 更改之后,我的项目开始工作。 我在这里找到了解决方法:https://www.logicbig.com/tutorials/spring-framework/spring-boot/boot-serve-dynamic.html

答案 43 :(得分:0)

我在尝试使用Thymeleaf的Spring Boot示例应用程序时遇到了类似的错误,不幸的是,尝试了所有不同的解决方案。

我的错误是从Controller方法返回的字符串没有相应的html视图。

可能是您错过了文件名,或者可能是拼写错误。 如控制器内部示例所示

@GetMapping("/")
public String listUploadedFiles(Model model) throws IOException {

    model.addAttribute("files", storageService.loadAll().map(
            path -> MvcUriComponentsBuilder.fromMethodName(FileUploadController.class,
                    "serveFile", path.getFileName().toString()).build().toString())
            .collect(Collectors.toList()));

    return "uploadForm";
}

返回字符串应与

上的html文件名匹配。
  

src / main / resources / templates / uploadForm.html

Thymeleaf将查找与返回类型名称相同的文件并显示视图。您可以尝试使用任何html文件,并在return语句中提供文件名,它将填充相应的视图。

答案 44 :(得分:-1)

我曾尝试过多种方法来解决这个问题,就像,我改变了依赖性 <artifactId>spring-boot-starter-web</artifactId><artifactId>spring-boot-starter-thymeleaf</artifactId>, 或者我将注释@RestController替换为@Controller,但这是同样的错误。最后,我通过在Application类的顶部添加一行注释@ComponentScan(basePackages = {“hello”})找到了一个解决方案,它完美地运行。

@ComponentScan(basePackages = {"hello"})
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(App.class, args);
    }
}

我希望它也会帮助你们。

答案 45 :(得分:-1)

maven清理或清理验证并尝试运行它。在部署另一个项目之前必须清理实例。它对我有用。我试了两天才明白这一点。

答案 46 :(得分:-2)

本教程希望您在类路径中拥有Thymeleaf模板引擎。我遇到了同样的问题,终于弄明白了。我将与教程作者联系,以包含该信息。

如果您遵循本教程,最简单的方法是将依赖项添加到项目根文件夹中的pom.xml。下次运行应用程序时,Spring将检测Thymeleaf并使用uploadform模板

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

有关完整示例,请参阅他们的Github repository