Java reterofit类,包含多个构造函数和多个类

问题描述 投票:0回答:1

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

例如,我的用户类具有id,balance,name等属性。当我通过发送POST请求创建新用户时,不需要像id和balance这样的属性。

这让我想到了这个问题:

  • 我应该向API发送不同的对象(如UserCreate,只需要创建新用户的属性)并接收完整的User对象吗?

要么

  • 我应该向User对象添加另一个构造函数,这只需要所有必需的参数(名称)吗?

我相信在这种情况下,额外的构造函数可能被认为是一种好的做法,但如果发布需要一组完全不同的属性呢? (我的用户类中未包含的属性)?

(另一种方法是使用Object(),但不知何故不起作用(Express说,它是一个http 400)。甚至可以在retrofit2中发送一个Post请求中的anon对象吗?)

java express retrofit2
1个回答
1
投票

首先,您的Java应用程序应该考虑所有需要的操作,如CREATE,UPDATE,DELETE。这些 - 粗略地 - 用HTTP方法PUTPATCHDELETE相应地识别。

现在,在每种情况下,前端发送(JSON / XML / REST)到Java后端的DTO表示可以是相同的:CREATE,UPDATE&DELETE。您的后端应该为上面列出的HTTP方法实现上述功能。从前端发送到后端的DTO(可能名为UserDTO)在所有情况下都可以是相同的。在这个DTO中,您可以将所有不相关的(与操作无关)字段设置为unset / null。

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

  • PUT,其中DTO拥有所有其他所需的字段,但Id
  • PATCH,其中DTO具有Id字段和所有已更改的字段
  • DELETE,DTO只有Id

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.