spring - 将 REST API 添加到 Spring MVC 应用程序
问题描述
假设应用程序具有基于 Spring MVC 和 Thymeleaf 的传统 UI,似乎有几种方法可以公开 REST API...
使用 @RestController 添加一组完全独立的控制器 - 感觉有很多重复,但允许 UI 与 REST 逻辑完全分离
为每个实体使用单个控制器,同时使用 @ResponseBody 方法和 ModelAndView 方法 - 将给定实体的所有逻辑保存在一个地方,但需要混合不同的概念
为每个实体使用单个控制器,仅使用 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 请求进行单独的异常处理?
解决方案
我会选择选项 1。拥有一组单独的@Controller
并@RestController
避免将 MVC 模式与您的 REST api 混合。为避免代码重复,您应该添加一个服务层并让 REST 端点和 MVC 控制器使用该服务层。
推荐阅读
- mysql - 分组依据和 2 个限制
- angular - 展开 mat-table 行时进行 API 调用
- python - 在 Pandas 中使用 Groupby 或枢轴计数功能后如何应用一些分析并获取原始数据
- spring - Spring Boot 测试 @Mock 注释不会创建模拟对象
- swift - 如何比较两个版本
- java - Cardview 未在 android studio 3.5.1 中显示
- python - 自定义按钮未显示所有实例的图像 - Kivy
- kubernetes - 为什么 kubelet 在 kubernetes 主节点上运行?
- tfs - TFS - 谁启用/禁用了多个结帐?
- python - 我想以更好的结构打印输出