假设应用程序使用基于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控制器使用该服务层。