java - 我的 REST 方法应该有一个单独的 Controller 吗?

标签 java spring rest

我有一个 Java Web 应用程序,目前我有两个 Controller 。

一个 Controller 用于 REST 调用,另一个 Controller 用于将 ModelAndView(使用 Spring MVC)对象传递到 View 。

我担心的是,这两种方法都引用相同的服务层调用。我是否应该创建一个包含与服务层交互的代码的抽象类?

REST Controller 是否应该与其他 Controller 合并?

最佳答案

我会确保 Controller 中没有任何逻辑。 Controller 应该只收到请求,调用另一个方法(位于服务层 - 比 API 层更低的层)并以合适的格式返回数据。

例如:

public class MyServiceLayer() {
   public List<SomeObject> getAllSomeObjects() {
     // Do some logic to get the object back
   }
}

然后你就可以拥有一个像这样的 Controller :

@Controller
public class MyController {

    @Autowired
    private MyServiceLayer myService;

    // Put annotation for getting it in Json
    public List<SomeObject> getAllSomeObjectsInJson() {
        return myService.getAllSomeObjects();
    }

    // Put annotation for getting the view data
    public ModelAndView getAllSomeObjectsView() {
       // Return your ModelAndView here.
    }
}

在这种情况下,如果您愿意的话,也可以将其拆分为 2 个 Controller 。

无论如何,你不应该有 2 个带有重复代码的 Controller - 这很糟糕!而且您不应该被迫将 2 个不同的 Controller 合并为一个。这就是为什么您应该将逻辑转移到不同的打包层。

通过这种方式,您还可以遵循“做一件事原则”,即一个类应该有一个目的。在这种情况下,MyServiceLayer 有一个目的 - 处理获取对象的逻辑。 Controller 层有一个目的 - 传输数据(以您想要的任何格式)。 例如,如果明天您想要添加 JMX API,您无需复制代码或扩展原始 Controller 。只需添加另一个类来处理 JMX 调用并使用 MyServiceLayer

关于java - 我的 REST 方法应该有一个单独的 Controller 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23813174/

相关文章:

java - 无效的方法声明;需要返回类型

spring - 如何以编程方式在 Cucumber 中设置 Spring 配置文件

java - 在 bean 上设置深层属性,如果需要创建中间实例

Java 9 javax.money.MonetaryAmount (JSR 354) : Unable to convert Pojo to XML and vice versa

Spring运行时对象/bean创建

java - 无法获取资源

java - 休息 - 如何获取调用者的 IP 地址

azure - 有没有办法使用 API 调用从 Azure Blob 存储帐户检索共享 key

java - 如何在 linux 上从 rest 服务执行 sh 文件

java - Bukkit - 为什么转换为 Damageable 有效?