Java 向服务发送表单

Java 向服务发送表单,java,spring,Java,Spring,我有一个名为AddNewItemForm的Spring表单,它包含验证注释 此表单是我的SpringRestControlleraddNewItem()方法的参数,它将被验证,结果存储在BindingResults中 我需要从我的控制器呼叫服务。这是我的问题。在我的服务中有一个带有此签名的方法可以吗 public Item add(AddNewItemForm form) 还是像这样更好 public Item add(Item item) 我认为表单只用于控制器验证,而服务不需要知道它。它

我有一个名为
AddNewItemForm
的Spring表单,它包含验证注释

此表单是我的Spring
RestController
addNewItem()
方法的参数,它将被验证,结果存储在
BindingResults

我需要从我的控制器呼叫服务。这是我的问题。在我的服务中有一个带有此签名的方法可以吗

public Item add(AddNewItemForm form)
还是像这样更好

public Item add(Item item)
我认为表单只用于控制器验证,而服务不需要知道它。它只需要知道如何使用实体

我想我应该在控制器中构造我的
,使用我拥有的所有数据,然后将该项传递给服务
添加(项)
方法


我说得对吗?

在我看来,服务不应该知道您的命令对象(AddNewItemForm),因为它们是完全独立的


我同意你的最后一个建议,你必须在调用你的服务之前构造你的模型对象。基本上在您的控制器中或在实用程序类的帮助下。

从依赖性的角度考虑它:您的web层始终需要了解您的服务模块,通过将AddNewItemForm(我假设它存在于您的web模块/包中)传递回您的服务,您现在有了一个循环依赖性

依赖项只能向下流动:


Repository>Service>Web

在某些情况下,可以在服务层上进行验证。例如,如果名称为的项目已经存在,或者项目所有者用户被阻止,则无法创建新项目。我严格指的是将controller中用于验证的表单传递给服务。我在控制器和服务两个位置进行验证。在控制器中,我验证表单输入,在服务中,我验证几乎相同的输入,与其他类型的逻辑(如您提到的逻辑)进行对比。我同意您最后的建议。验证控制器中的表单输入->将其解析为服务对象并将其发送到服务,服务将验证该项。