具有多个构造函数和多个类的Java reterofit类

时间:2019-02-16 16:16:44

标签: java express retrofit2

我想将我的REST API与Jav​​a应用程序结合使用。 当我开始设计程序时,一切都很好,但是现在我面临一个大问题:

例如,我的用户类具有ID,余额,名称之类的属性。 通过发送POST请求创建新用户时,不需要id和balance之类的属性。

这使我想到一个问题:

  • 我应该将其他对象(如UserCreate,仅具有创建新用户所需的属性)发布到API并接收完整的User对象吗?

OR

  • 是否应该向我的User对象添加一个仅需要所有必需参数(名称)的构造函数?

我认为在这种情况下,可以考虑使用额外的构造函数,但是如果发布需要一组完全不同的属性怎么办? (我的用户类别中未包含的属性)

(另一种方法是使用Object(),但某种程度上不起作用(Express说,它是http 400)。甚至在Retrofit2中也可以在Post请求中发送匿名对象吗?)

1 个答案:

答案 0 :(得分:1)

首先,您的Java应用程序应考虑所有必需的操作,例如CREATE,UPDATE,DELETE。大致用HTTP方法PUTPATCHDELETE来标识这些。

现在,每种情况下,您的前端向Java后端发送的DTO表示形式(JSON / XML / REST)都可以相同:CREATE,UPDATE和DELETE。您的后端应为上面列出的HTTP方法实现上述功能。从前端发送到后端的 DTO (可能称为UserDTO)在所有情况下都可以相同。在此DTO中,您只需将所有不相关(与操作无关)的字段都保留为空/空即可。

更详细:您的后端应具有接受HTTP方法的方法:

  • PUT,其中DTO包含所有其他必填字段,但 Id
  • PATCH,其中DTO具有 Id 字段和所有已更改字段
  • DELETE,其中DTO仅具有 Id

我不知道您使用的框架如何根据您发送的DTO构造实际的POJO。但是现在您有了这三种方法,您实际上都知道如何处理传入的DTO,即知道它是CREATE,UPDATE还是DELETE。

因此,如果您需要自己构造POJO,则需要CREATE的构造函数,对于更新来说很难说,也许您需要获取原始用户并逐字段更新它,而删除ID实际上应该足以删除用户。

  

但是如果发布将需要一组完全不同的属性怎么办? (我的用户类别中未包含的属性)?

这似乎是HTTP POST。因此,它不是CREATE,UPDATE或DELETE操作,而是根据某些任意操作和数据来改变状态的东西-也许是User-。当然,对于不在用户中的数据,您需要其他DTO来保存此数据。