【发布时间】:2013-04-24 00:15:38
【问题描述】:
我正在开发一个使用 JAX-RS、Jackson 和 JPA 的项目。 JAX-RS 资源将传入的 JSON 直接映射到最终要持久化的 POJO (JPA)。
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response createEntity(Entity entity) {
...
}
但是,我偶尔会发现资源需要从客户端获得的信息并没有将 1:1 清晰地映射到 POJO。还有一些额外的字段提供了一些关于如何处理请求的元数据。例如,回调 URL 或未持久化的明文密码。
是否有一种优雅的方式来保存这些信息,同时仍然直接映射到 JPA 实体?
我有一些想法,但我对其中任何一个都不感兴趣:
-
首先映射到
Map<String, Object>:然后使用 ObjectMapper 映射到配置为忽略某些属性的实体。这会导致某些资源(为了一致性起见,可能是所有使用 JSON 的资源)的一些额外样板代码 - 使用@Transient 字段获取额外值:这允许 Jackson 清晰地映射到 POJO,但往往会使数据模型与业务逻辑混淆,而不仅仅是关注实体的状态和行为。
- 使用@QueryParam 获取额外值:似乎使资源接口复杂化,从客户端的角度来看似乎有点随意。
有什么想法吗?如果可以装配 JAX-RS MessageBodyReader 或某种上下文提供程序以将额外参数的 Map 作为附加参数传递给该方法,那就太好了,但我不知道这需要做多少工作。
【问题讨论】:
标签: java jakarta-ee jpa jackson jax-rs