如何在Spring应用程序中使用多个控制器?

时间:2017-06-10 00:42:39

标签: java spring http spring-mvc spring-boot

我尝试使用两个控制器来处理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);
    }
}

2 个答案:

答案 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>