【发布时间】:2019-01-29 21:57:02
【问题描述】:
我正在设计一个 REST 服务,并且遇到了一个问题,即对于给定的对象,我有多个“状态”。
- 在初始 POST 操作中到达的对象。
- 我存储在数据库中的对象
- 我通过 GET 返回的对象
- 我期望在 PATCH 上的对象
例如
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 的公共字段,另一个是从它扩展而来的,其余的都从它扩展而来,但感觉很混乱,尤其是当我们处理比简单示例更复杂的对象时。
这实际上不是问题,因为无论如何我都会验证和清理输入,但我想知道 Jackson 是否有一种干净的方法来解决这个问题。
【问题讨论】:
标签: java spring-boot jackson