我正在设计REST服务,并且遇到了一个给定对象存在多个“状态”的问题。
例如
class MyObject {
// Unwanted on POST
// Required on PATCH
// Included on GET
@JsonProperty("id")
private UUID id;
// Everywhere
@NonNull
@JsonProperty("name")
private String name;
// Field I need for internal processing but don't want included in REST.
private AuditTrail stuff;
@JsonCreator
@Builder
public MyObject(...) { ... }
}
...
@Get
public ResponseEntity myFunction(HttpServletRequest request,
@RequestBody @Valid MyObject requestBody) {
...
}
我遇到的问题是在POST上,当省略id时,反序列化失败。我使用@JsonIgnoreProperties()解决了这个问题,但是现在在PATCH上,我确实希望id出现,如果省略它,事情就可以了。
我们戏弄的另一个选择是有两个对象。第一个具有POST的公共字段,另一个具有POST的公共字段,但是感觉很混乱,尤其是当我们处理比简单示例更复杂的对象时。
这实际上不是问题,因为无论如何我都会验证和清理输入,但是我想知道杰克逊是否有一种干净的方法来解决此问题。
答案 0 :(得分:0)
如果您打算提供休息服务,那么您无论如何都不需要身体中的ID。该ID将作为路径变量来自网址:
POST myobjects
GET myobjects/{id}
PATCH myobjects/{id}