我尝试使用两个控制器来处理Spring应用程序中的请求,但是没有按预期工作:
Controller1 正在正确处理请求:
@Controller
@RequestMapping("/appclient")
public class Controller1 {
...
}
Controller2 未处理任何讯息:
@Controller
@RequestMapping("/webclient")
public class Controller2 {
@RequestMapping(value = "/product", method = RequestMethod.GET)
public ModelAndView addProduct () {
// Do something
}
}
我使用Postman测试我的应用程序,并且我收到以下错误,这意味着没有为" / webclient / product"定义控制器操作。 ,这不是真的。
{
"timestamp": 1497048933216,
"status": 404,
"error": "Not Found",
"message": "No message available",
"path": "/webclient/product"
}
如果我修改 Controller1 以便它可以处理" / webclient / product" ,它可以正常工作,但这不是我想要的方式此
知道为什么Controller2不能正常工作吗?
编辑:这是主要的课程
@SpringBootApplication
public class MyServerApplication {
public static void main(String[] args) {
SpringApplication.run(MyServerApplication.class, args);
}
}
答案 0 :(得分:0)
在控制器2中,您可以返回HTTP响应,如下所示:
@Controller
@RequestMapping("/webclient")
public class Controller2 {
@RequestMapping(value = "/product", method = RequestMethod.GET)
public ResponseEntity<?> addProduct () {
HttpHeaders header = new HttpHeaders();
header.add("Content-Type", "application/json");
return new ResponseEntity<>(header, HttpStatus.OK);
}
}
来自wiki:
HTTP在客户端 - 服务器中用作请求 - 响应协议 计算模型
话虽如此,你不能只是回归虚空。 HTTP是基于请求 - 响应的,因此,您必须返回响应。
404表示找不到HTTP,换句话说,POSTMAN找不到此处理程序。
尝试添加主机,例如:
http://localhost:8080/webclient/product
并确保您使用的是像您提到的GET方法。
答案 1 :(得分:0)
我已经检测到了我的问题,对我很愚蠢......我忘了在我的pom.xml
中包含 Thymeleaf 依赖项。
Controller1 正在运行,因为它是一个RESTful服务,它不依赖于 Thymeleaf ,但 Controller2 基于MVC而不是能够找到模板,因此,正在返回该错误。
添加此依赖项解决了我的问题:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>