我想将我的REST API与java应用程序结合使用。当我开始设计我的程序时,一切都很好,但现在我面临一个大问题:
例如,我的用户类具有id,balance,name等属性。当我通过发送POST请求创建新用户时,不需要像id和balance这样的属性。
这让我想到了这个问题:
要么
我相信在这种情况下,额外的构造函数可能被认为是一种好的做法,但如果发布需要一组完全不同的属性呢? (我的用户类中未包含的属性)?
(另一种方法是使用Object(),但不知何故不起作用(Express说,它是一个http 400)。甚至可以在retrofit2中发送一个Post请求中的anon对象吗?)
首先,您的Java应用程序应该考虑所有需要的操作,如CREATE,UPDATE,DELETE。这些 - 粗略地 - 用HTTP方法PUT
,PATCH
和DELETE
相应地识别。
现在,在每种情况下,前端发送(JSON / XML / REST)到Java后端的DTO表示可以是相同的:CREATE,UPDATE&DELETE。您的后端应该为上面列出的HTTP方法实现上述功能。从前端发送到后端的DTO(可能名为UserDTO)在所有情况下都可以是相同的。在这个DTO中,您可以将所有不相关的(与操作无关)字段设置为unset / null。
更详细:您的后端应该有接受HTTP方法的方法:
PUT
,其中DTO拥有所有其他所需的字段,但IdPATCH
,其中DTO具有Id字段和所有已更改的字段DELETE
,DTO只有Id我不知道您使用的框架如何构建您发送的DTO中的实际POJO。但是现在你有三种方法,你实际上知道如何处理传入的DTO,即你知道它是CREATE,UPDATE还是DELETE。
因此,如果您需要自己构建POJO,则需要CREATE的构造函数,对于更新很难说,也许您需要获取原始用户并逐字段更新它并且实际上删除id应该足以删除用户。
但是如果发布需要一组完全不同的属性呢? (我的用户类中未包含的属性)?
这似乎是一个HTTP POST
。所以它不是CREATE,UPDATE或DELETE操作,而是基于某些任意操作和数据改变状态的东西 - 可能是用户。当然,对于不在用户中的数据,您需要一些其他DTO来保存此数据。