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

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

应用程序可以运行,但是我得到了错误:

Whitelabel Error Page 这个应用程序没有显式的/Error 映射,因此您将其视为一个回退。 2015年6月30日星期二17:24:02 CST 出现意外错误(type = Not Found,status = 404)。 没有留言

我该怎么补救?

703334 次浏览

可以通过在应用程序中添加 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;
}
}

上面的类是基于 SpringBasicErrorController类的。

你可以像这样在 @Configuration文件中实例化上面的 ErrorController:

 @Autowired
private ErrorAttributes errorAttributes;


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

您可以通过实现 属性错误选择覆盖默认的 ErrorAttributes。但是在大多数情况下,默认错误属性应该足够了。

本教程希望 Thymeleaf 模板引擎位于类路径中。我也遇到了同样的问题,最终想明白了这一点。我会联系教程的作者,包括这些信息。

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

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

完整的例子见他们的 Github 仓库

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

您可以选择: 访问正确的页面,添加自己的登录页面,或 覆盖白色错误页

为了简化这种特殊情况,我更新了指南,使其使用/而不是/上传。

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

当你运行一个 Spring 引导应用程序(例如一个带有@SpringBootApplication 注释的类)时,Spring 只会扫描你的主类包下面的类。

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

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

如果我的主类包是 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

最后一件事,以确保您的控制器映射或不只是控制台您应该看到一些微笑

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

编程愉快

尝试添加依赖项。

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

为了解决这类问题,我所做的只是在 MVCConfig 类中提到了注释 @ 配置

比如这个:

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


}

当我们创建一个 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 文档:

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

@SpringBootApplication注释等效于使用 @Configuration@EnableAutoConfiguration@ComponentScan 默认属性

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

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


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

我犯了一个类似的错误,我使用了 spring boot 和 velocity,我的解决方案是检查文件 application.properties,spring.velocity.toolbox-config-location 发现这个属性是错误的

你可能会得到错误,即。

“这个应用程序没有显式的/error 映射,因此您将其视为一种备用方案。”

这是因为它没有像这样扫描控制器和服务类,这些类必须在 main ()类中指定,

package com.example.demo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@EnableAutoConfiguration
**@ComponentScan({"com.example.demo", "controller", "service"})**
public class SpringBootMvcExample1Application {
public static void main(String[] args) {
SpringApplication.run(SpringBootMvcExample1Application.class, args);
}
}

注意: 在这里,我已经指定了各种类别,如演示,控制器和服务被扫描,然后才能正常工作。

在我的例子中,这个问题发生在使用 maven 首次运行 IntelliJ 之后从 IntelliJ 内部运行 SpringApplication 时。

为了解决这个问题,我首先运行 mvn clean,然后在 IntelliJ 中运行 SpringApplication。

在我的例子中,控制器类使用 @Controller进行注释。将其改为 @RestController就解决了问题。 基本上 @RestController就是 @Controller + @ResponseBody 因此,要么使用 @RestController,要么使用带有 @ResponseBody注释的 @Controller和每个方法。

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

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

我也得到了同样的错误,并且能够通过将下面的依赖项添加到 pom.xml 来解决这个错误。

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

原因是我们使用 JSP 作为视图。 要启用对 JSP 的支持,我们需要添加对 tomcat-embed-jasper 的依赖项。

在我的例子中,我从控制器返回一个 JSP 作为 view。 希望这个答案能够帮助那些正在为同样的问题而苦苦挣扎的人。

执行 maven clean 或 clean 确认并尝试运行它。在部署另一个项目之前,必须清理这些实例。这招对我很管用。我试了两天才明白。

我正在开发的春天启动应用程序了几个星期。我得到了同样的错误,如下;

白标签错误页 这个应用程序没有显式的/error 映射,因此您将其视为一种备用方案。 Thu Jan 1814:12:11 AST 20182018年1月18日星期四14:12:11 出现意外错误(type = Not Found,status = 404)。 没有留言

当我得到这个错误消息,我意识到我的控制器或休息控制器类没有定义在我的项目。我的意思是你需要把你的控制器包的名字添加到@Component entScan 注释到你的主类中,它包含了@SpringBootApplication 注释。如果你写下面的代码,你的问题将得到解决... 最重要的是您必须像我在下面所做的那样,将您的所有控制器的包添加到@Component entScan 注释中

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

我希望这些密码能帮到别人。

如果你找到其他方法来解决这个错误或者你有什么建议给我, 请写评论... 谢谢..。

我也尝试了很多方法来解决这个问题,就像,我改变了依赖性 <artifactId>spring-boot-starter-web</artifactId>呼叫 <artifactId>spring-boot-starter-thymeleaf</artifactId>, 或者我将注释@RestController 替换为@Controller,但是出现了同样的错误。最后,我在 Application 类的顶部添加了一行注释@Component entScan (basePackages = {“ hello”}) ,找到了一个解决方案,它工作得非常完美。

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

我希望这对你们也有帮助。

确保 Main.同学们位于控制器的顶部:

包含:

@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();
}
}

如果您的主类在根文件夹中,就像这个路径一样: < em > { projectname }/src/main/java/main ,然后确保您的控制器在 Main 类之下。例如 < em > { projectname }/src/main/java/main/controller

在主类中,在配置“@SpringBootApplication”之后,添加“@Component-Scan”而没有任何参数,对我来说很有用! ! !

主要班级:

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

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

我知道这不是问题的答案,但这个问题是第一个出现在谷歌上的:)

当尝试访问 Swagger UI 时,出现问题(“此应用程序没有显式的/error 映射”)。

在我的案例中,问题是由@RestController (“/endpoint”)引起的,这个问题没有得到正确的处理。

所以,这导致了错误:

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

这样挺好的

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

在具有主类的 java 文件(比如: Viper.java)中,添加: < strong > “@RestController” 和 < strong >@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);
}


}

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

这意味着你正在尝试访问不存在的页面。 假设您的 jsp 文件现在位于/webapp/home.jsp,如果您在代码中使用@RequestMapping (“/home”)并返回“ home.jsp”; 那么如果您尝试使用 localhost: port/访问,您将得到这个错误,但是如果您尝试使用 localhost: port/home,则不会出现错误 您可以通过检查您要访问的页面的@RequestMapping (“/”)来修复这个问题。 您还可以尝试从 maven 依赖项添加 tomcat jaspher 的依赖项

我当时也面临着同样的问题,使用 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')

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

我当时正面临这个问题,后来意识到我在 MvcConfig类中遗漏了 @Configuration注释,它基本上为 ViewControllerssetViewNames做了映射。

以下是该文件的内容:

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

希望这对谁有帮助! !

如果没有定义显式错误页,就会发生这种情况。若要定义错误页面,请创建视图的/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";
}


}

在教程中,控制器使用@Controller 进行注释,用于创建模型对象映射和查找视图,但是@RestController 只是返回对象,对象数据直接写入 HTTP 响应中,作为 JSON 或 XML。 如果要查看响应,请使用 @ RestController 或者与@Controller 一起使用 @ ResponseBody

@Controller
@ResponseBody

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

如果您忘记了控制器类顶部的@RestController 注释,就会发生这种情况 导入 import org.springframework.web.bind.annotion. 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!";
}


}

使用 Spring Boot 和 application.properties 文件,我必须更改项目的结构。JSP 文件应该在这个位置: 主要资源 META-INF 资源 WEB-INF jsp。 在这个变化之后,我的项目工作。 我已经在这里找到了解决方案: (a href = “ https://www.logicbig.com/Tutorials/spring-Framework/spring-boot/boot-service-Dynamic.html”rel = “ nofollow norefrer”> https://www.logicbig.com/tutorials/spring-framework/spring-boot/boot-serve-dynamic.html

请确保您没有将视图、 JSP 或 HTML 放在 WEB-INF 或 META-INF 中

谨慎提及这些细节:

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

在使用 Thymeleaf 尝试 Spring Boot 示例应用程序时,我也遇到了类似的错误,很遗憾,所有提供的不同解决方案都不起作用。

我的错误是 Controller 方法返回的字符串没有相应的 view 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";
}

返回的 String 应该与 html 文件名相匹配

Src/main/resources/template/uploadForm.html

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

当你的 Spring 应用找不到 Spring 组件并且没有在 sprint 容器中初始化的时候,这种情况就会发生。你可以使用@Component Scan 和@SpringBootApplication 一起添加组件,如下例所示

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


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


}

在上面的例子中,模型和服务是我的应用程序中的包。

如果您已经使用 requestMapping 对接口进行了注释,请确保您还对使用@Component 实现接口的 Class 进行了注释。

您必须组织这些包,以便包含 public static main (或者您编写@SpringBootApplication 的地方)的包成为所有其他包的父亲。

确保在依赖项列表中有 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

作者: 比珠昆珠门

已经很晚了。根据 Spring 官方文档“ Spring Boot 安装了一个白标错误页面,如果遇到服务器错误,可以在浏览器客户端中看到该页面。” Https://docs.spring.io/spring-boot/docs/current/reference/htmlsingle/#howto-customize-the-whitelabel-error-page

  1. 您可以通过在 应用应用性能文件中设置 server.error.whitelabel.enabled=false来禁用该特性。

2.推荐的方法是设置您的错误页面,以便最终用户可以理解。在 资源/范本文件夹下创建一个 错误文件并在 Pom.xml文件中添加依赖项

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

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

我需要提到这种方式,并给出参考包和它的工作。你可以排除 @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);


}
}

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

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

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

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

如果所有配置都正确完成 (正如这个问题的前两三个答案所描述的) ,并且仍然得到“ Whitelabel Error Page”,那么这个应用程序没有显式的/Error 映射,那么这个解决方案可能会帮助您

有时,除了配置之外,问题也可能来自代码方。 你可能错过了一些很基本的东西。
为了确定问题,您需要检查跟踪,对于下面的步骤

终端打开。
1) cd project _ location,获取项目位置。
例如: eclipse-> project (右击)-> properties-> resource (tab)-> copy path against location 字段。
2)然后运行 script < strong > ./mvnw spring-boot: run

然后转到 http://localhost:8080/http://localhost:8080/xyz任何你期待数据的网址。只要你点击链接,跟踪就会得到更新。

我犯了一个错误
2020-05-2306:52.42.405 错误3512——-[ nio-8080-exec-1] O.A.C.C. [。[.[/].路径抛出异常[][请求处理失败; 嵌套异常是 org.springframework.orm.jpa ]。实体: : com.ibsplc.com.payroll.model 没有缺省构造函数。Employee; 嵌套异常是 org.hibernate。实体: : com.ibsplc.com.payroll.model 没有缺省构造函数。[雇员]有根本原因

所以我给“员工”模型加了个缺省构造函数。 以 maven-build 方式运行项目 然后运行 script./mvnw spring-boot: run,
对我很有效

主类需要是你的应用程序包树结构的 在外面。例如: example

确保@RestController 注释是在@SpringBootApplication 之后添加的。 RestController 注释告诉 Spring,这段代码描述了一个应该通过 web 提供的端点。

我在为 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并尝试使用浏览器访问应用程序,那么您可能会遇到同样的问题。

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

在我的例子中,我遇到了这个问题,因为我的服务器已经在执行 UploadingFilesApplication.java(带有 @SpringBootApplication注释的文件)时运行了。

我通过执行 FileUploadController.java(带有 @Controller注释的文件)重新运行服务器来修复这个问题。

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

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

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();
}
}

我还必须在 Controler.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";
}
}

然后点击网址后: http://localhost:9090/your-app-root/swagger-ui/大摇大摆的用户界面就会显示出来。 例如,在我的例子中,url 是: http://localhost:9090/students/swagger-ui/

当我学习春天仇恨的时候,我遇到了这个问题。我检查了上面给出的所有答案,但问题没有得到解决。最后,我将我的控制器类粘贴到“ main application.java”包中,它对我很有用。[![你可以在图片中看到,我在一个包中添加了我的控制器类和主类。你也可以添加“模型类,主类和控制器类”在同一个包,也为我工作。在下图中,我在同一个包中添加了控制器和主类。

Project Structure

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

@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方法中。

这个错误发生在我身上,

因为控制器文件(在 restfortest 包中)不在 Application.java (SpbdemoApplication)文件目录中。

enter image description here

来解决这个问题,

  1. 您可以将 restfortest 包作为子包,如 rest 包 在下图中显示。

2. 其他情况下,可以将 application.java 文件编辑为下图。

enter image description here

发生此错误是因为@SpringBootApplication 告诉 Spring 查找 Spring 组件并配置应用程序以运行。Spring 如果不与控制器类放在同一个包中(在这里 com.pj.lerningcurve.spddemo) ,则不能看到控制器类

添加 devtools 依赖项,这将启用 H2Console AutoConfiguration。

 <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>

在日志中可以看到以下行:

o.s.b.a.h2.H2ConsoleAutoConfiguration    : H2 console available at '/h2-console'. Database available at 'jdbc:h2:mem:my-app'

然后尝试访问

http://localhost:8080/h2-console/

和我最近遇到的问题一样,我用 getter 和 setter 方法解决了拼写错误!

排队晚了,但这个帮了我。

如果控制器的返回类型是一个自定义对象,那么定义 getter 和 setter 就可以解决这个问题,前提是我们有其他的注释。 例如。

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

总监:

@RestController
public class HelloController {


@GetMapping("/")
public Response index() {
return new Response( "Greetings from Spring Boot!" );
}


}

回应:

@Getter
@Setter
public class Response{
String testResponse;


public Response(String testResponse) {
this.testResponse = testResponse;
}
}

它不能正常工作的原因之一可能仅仅是因为您没有在控制器中添加根目录。我是按照 Intellij 的想法,他们说,如果你不,它将自动设置为根,但在我的情况下,它没有。我用的都是最新的版本。

会成功的。

package com.sprindemo.demohelloword;


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


@RestController
public class HelloWorldController {


@RequestMapping("/") //  <<<<<<<<<<<
public String helloWord() {
return "Hello world from Spring Boot";
}
}


这不常见,根不见了

package com.sprindemo.demohelloword;


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


@RestController
public class HelloWorldController {


@RequestMapping //  <<<<<<<<<<<
public String helloWord() {
return "Hello world from Spring Boot";
}
}