Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBoot-控制器和请求映射始终返回404_Java_Spring_Rest_Maven_Spring Boot - Fatal编程技术网

Java SpringBoot-控制器和请求映射始终返回404

Java SpringBoot-控制器和请求映射始终返回404,java,spring,rest,maven,spring-boot,Java,Spring,Rest,Maven,Spring Boot,我正在尝试该示例的简化版本。该项目是在VSCode中使用Springboot扩展附带的初始值设定项设置的 DemoApplication.java package com.sample.demo; 导入org.springframework.boot.SpringApplication; 导入org.springframework.boot.autoconfigure.springboot应用程序; @SpringBoot应用程序 公共类演示应用程序{ 公共静态void main(字符串[]ar

我正在尝试该示例的简化版本。该项目是在VSCode中使用Springboot扩展附带的初始值设定项设置的

DemoApplication.java

package com.sample.demo;
导入org.springframework.boot.SpringApplication;
导入org.springframework.boot.autoconfigure.springboot应用程序;
@SpringBoot应用程序
公共类演示应用程序{
公共静态void main(字符串[]args){
run(DemoApplication.class,args);
}
}
CalculatorController.java

package com.sample.demo;
导入org.springframework.stereotype.Controller;
导入org.springframework.web.bind.annotation.RequestMapping;
@控制器
公共类计算器控制器{
@请求映射(“/”)
公共字符串索引(){
返回“索引”;
}
}
我正在从VSCode运行应用程序,并以:
http://localhost:8080/
。我一直收到一个
404
错误。当我将
@Controller
注释更改为
@RestController
注释时,它会工作。此外,还有
resources\templates\index.html


我遗漏了什么?

上下文是对spring的高度概述MVC是使用前端控制器设计模式设计的,其中Dispatcher servlet将接收所有请求并调用相应的处理程序,以便调用您的控制器方法,而您的控制器类则用 @Controller annoation dispatcher servlet考虑了该返回值,并尝试在MVC中定位视图,以便您需要配置ViewResolver的任何一种实现。在您的情况下,您需要配置InternalResourceViewResolver和具有相应视图位置的Themelaf

如果您的控制器带有@RestController注释,则处理程序的返回值将被视为Http响应分派器,servlet不会查看任何视图(它将返回值视为Http响应体)


您可以通过@Controller注释本身实现同样的效果,只需在处理程序方法中添加此注释@ResponseBody(返回值被视为http响应)。

Spring MVC中的@RestController注释只是@Controller和@ResponseBody注释的组合。它被添加到Spring4.0中,以使在SpringFramework中开发RESTfulWeb服务更加容易

@Controller的工作是创建模型对象的映射并查找视图,但@RestController只返回对象,对象数据直接以JSON或XML的形式写入HTTP响应

@SuppressWarnings({})
@RestController
public class TestController {
    @PostMapping("/test/1")
    public Object Test1(@RequestBody HashMap<String, String> obj) throws ParseException, IOException {
        return null;
    }
@SuppressWarnings({})
@RestController
公共类测试控制器{
@后映射(“/test/1”)
公共对象Test1(@RequestBody HashMap obj)抛出ParseException,IOException{
返回null;
}

阅读更多信息:

@RestController是@Controller和@ResponseBody的组合。因此请求处理方法将对象作为Json或XML返回到HttpResponse中,因此不需要@ResponseBody

@RestController
public class UserRestController { }

@Controller
@ResponseBody
public class UserController { }

@ResponseBody是一个Spring注释,它将返回值的方法绑定到web响应体。它告诉控制器返回的对象被自动序列化为JSON并传递回HttpResponse对象。

您的pom.xml是什么?项目的布局是什么?您如何简化示例?
pom.xm中没有任何更改l
;它与VSCode设置的内容相同。项目的布局是在VSCode中初始化设置的。简化方法是只为
/
编写一个映射。当您使用
mvn spring boot:run
运行应用程序时会发生什么情况。请问,您可以发布pom.xml并发布项目的布局吗?说您将其设置为uVSCode中的p没有告诉我们它是什么。好的。pom与示例中的pom不同。您缺少依赖项。包含
thymeleaf
后,它现在可以工作了!请添加您的注释作为答案,以便我可以接受它。