我有一个用 JSON 格式的客户数据:
{
"name":"My Name",
"company":{
"id":9
}
}
我的实体看起来像:
@Entity
public class Customer {
@Id
Integer id;
String name;
@Reference
Company company;
/* getters and setters */
}
我想用 Jackson 反序列化这些数据并获得company
via的参考EntityManager.getReference(Company.class, id)
。注解@Reference
是一个自定义注解,表示我希望你使用我的自定义反序列化器并检索引用。目标是透明地访问company
我的 JAX-RS 服务端点中的信息。
我的问题是:我应该如何在反序列化过程中注入或创建 EntityManager ?
这是一些代码:
@Provider
public class ObjectMapperContext implements ContextResolver<ObjectMapper> {
private ObjectMapper mapper;
public ObjectMapperContext() {
super();
mapper = new ObjectMapper();
mapper.registerModule(new CustomModule());
}
@Override
public ObjectMapper getContext(Class<?> type) {
return mapper;
}
}
在CustomModule.java
:
public class CustomModule extends SimpleModule {
@Override
public void setupModule(SetupContext context) {
super.setupModule(context);
AnnotationIntrospector ai = new CustomAnnotationIntrospector();
context.appendAnnotationIntrospector(ai);
}
[...]
}
最后,在CustomAnnotationIntrospector.java
:
public class CustomAnnotationIntrospector extends AnnotationIntrospector {
@Override
public Object findDeserializer(Annotated am) {
Reference reference = am.getAnnotation(Reference.class);
if(reference == null){
return null;
}
return CustomDeserializer.class;
}
}