- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将 REST API 与 java 应用程序结合使用。当我开始设计程序时,一切都很好,但现在我面临一个大问题:
例如,我的用户类具有 id、余额、名称等属性。当我通过发送 POST 请求创建新用户时,不需要 id 和余额等属性。
这让我想到了一个问题:
或者
我相信在这种情况下,额外的构造函数可能被认为是很好的做法,但是如果发布需要一组完全不同的属性怎么办? (未包含在我的用户类中的属性)?
(另一种方法是使用 Object(),但不知怎的,这不起作用(Express 说,它是一个 http 400)。在 Retrofit2 中是否有可能在 Post 请求中发送匿名对象?)
最佳答案
首先,您的 Java 应用程序应考虑所有所需的操作,例如创建、更新、删除。这些粗略地通过 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 应该足以删除用户。
but what if posting would require a set of completely different attributes? (attributes that are not included in my user class)?
这似乎是一个 HTTP POST
。因此,它不是创建、更新或删除操作,而是基于某些任意操作和数据来更改状态(可能是用户)的操作。当然,对于不在 User 中的数据,您需要其他一些 DTO 来保存该数据。
关于具有多个构造函数的 Java 改造类与多个类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54725081/
C语言sscanf()函数:从字符串中读取指定格式的数据 头文件: ?
最近,我有一个关于工作预评估的问题,即使查询了每个功能的工作原理,我也不知道如何解决。这是一个伪代码。 下面是一个名为foo()的函数,该函数将被传递一个值并返回一个值。如果将以下值传递给foo函数,
CStr 函数 返回表达式,该表达式已被转换为 String 子类型的 Variant。 CStr(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CSng 函数 返回表达式,该表达式已被转换为 Single 子类型的 Variant。 CSng(expression) expression 参数是任意有效的表达式。 说明 通常,可
CreateObject 函数 创建并返回对 Automation 对象的引用。 CreateObject(servername.typename [, location]) 参数 serv
Cos 函数 返回某个角的余弦值。 Cos(number) number 参数可以是任何将某个角表示为弧度的有效数值表达式。 说明 Cos 函数取某个角并返回直角三角形两边的比值。此比值是
CLng 函数 返回表达式,此表达式已被转换为 Long 子类型的 Variant。 CLng(expression) expression 参数是任意有效的表达式。 说明 通常,您可以使
CInt 函数 返回表达式,此表达式已被转换为 Integer 子类型的 Variant。 CInt(expression) expression 参数是任意有效的表达式。 说明 通常,可
Chr 函数 返回与指定的 ANSI 字符代码相对应的字符。 Chr(charcode) charcode 参数是可以标识字符的数字。 说明 从 0 到 31 的数字表示标准的不可打印的
CDbl 函数 返回表达式,此表达式已被转换为 Double 子类型的 Variant。 CDbl(expression) expression 参数是任意有效的表达式。 说明 通常,您可
CDate 函数 返回表达式,此表达式已被转换为 Date 子类型的 Variant。 CDate(date) date 参数是任意有效的日期表达式。 说明 IsDate 函数用于判断 d
CCur 函数 返回表达式,此表达式已被转换为 Currency 子类型的 Variant。 CCur(expression) expression 参数是任意有效的表达式。 说明 通常,
CByte 函数 返回表达式,此表达式已被转换为 Byte 子类型的 Variant。 CByte(expression) expression 参数是任意有效的表达式。 说明 通常,可以
CBool 函数 返回表达式,此表达式已转换为 Boolean 子类型的 Variant。 CBool(expression) expression 是任意有效的表达式。 说明 如果 ex
Atn 函数 返回数值的反正切值。 Atn(number) number 参数可以是任意有效的数值表达式。 说明 Atn 函数计算直角三角形两个边的比值 (number) 并返回对应角的弧
Asc 函数 返回与字符串的第一个字母对应的 ANSI 字符代码。 Asc(string) string 参数是任意有效的字符串表达式。如果 string 参数未包含字符,则将发生运行时错误。
Array 函数 返回包含数组的 Variant。 Array(arglist) arglist 参数是赋给包含在 Variant 中的数组元素的值的列表(用逗号分隔)。如果没有指定此参数,则
Abs 函数 返回数字的绝对值。 Abs(number) number 参数可以是任意有效的数值表达式。如果 number 包含 Null,则返回 Null;如果是未初始化变量,则返回 0。
FormatPercent 函数 返回表达式,此表达式已被格式化为尾随有 % 符号的百分比(乘以 100 )。 FormatPercent(expression[,NumDigitsAfterD
FormatNumber 函数 返回表达式,此表达式已被格式化为数值。 FormatNumber( expression [,NumDigitsAfterDecimal [,Inc
我是一名优秀的程序员,十分优秀!