我想将我的REST API与Java应用程序结合使用。 当我开始设计程序时,一切都很好,但是现在我面临一个大问题:
例如,我的用户类具有ID,余额,名称之类的属性。 通过发送POST请求创建新用户时,不需要id和balance之类的属性。
这使我想到一个问题:
OR
我认为在这种情况下,可以考虑使用额外的构造函数,但是如果发布需要一组完全不同的属性怎么办? (我的用户类别中未包含的属性)?
(另一种方法是使用Object(),但某种程度上不起作用(Express说,它是http 400)。甚至在Retrofit2中也可以在Post请求中发送匿名对象吗?)>
答案 0 :(得分:1)
首先,您的Java应用程序应考虑所有必需的操作,例如CREATE,UPDATE,DELETE。大致用HTTP方法PUT
,PATCH
和DELETE
来标识这些。
现在,每种情况下,您的前端向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来保存此数据。