首页 > 解决方案 > 将 REST API 添加到 Spring MVC 应用程序

问题描述

假设应用程序具有基于 Spring MVC 和 Thymeleaf 的传统 UI,似乎有几种方法可以公开 REST API...

  1. 使用 @RestController 添加一组完全独立的控制器 - 感觉有很多重复,但允许 UI 与 REST 逻辑完全分离

  2. 为每个实体使用单个控制器,同时使用 @ResponseBody 方法和 ModelAndView 方法 - 将给定实体的所有逻辑保存在一个地方,但需要混合不同的概念

  3. 为每个实体使用单个控制器,仅使用 ModelAndView,并使用带有 JSON 视图解析器的内容协商,如 MappingJackson2JsonView ( https://spring.io/blog/2013/06/03/content-negotiation-using-views/ )

我对 #3 特别感兴趣,因为它感觉类似于 Ruby on Rails 控制器如何使用 respond_to 处理不同的内容类型。

这是 Spring 应用程序中的常见方法/最佳实践吗?

POST 和 DELETE 请求是否仍需要单独的方法,因为它们在 REST API 和 UI 之间的工作方式可能不同?(即发布表单与发布 json 实体)

它是否需要根据它是 UI 请求还是 API 请求进行单独的异常处理?

标签: springspring-bootspring-mvc

解决方案


我会选择选项 1。拥有一组单独的@Controller@RestController避免将 MVC 模式与您的 REST api 混合。为避免代码重复,您应该添加一个服务层并让 REST 端点和 MVC 控制器使用该服务层。


推荐阅读