JSON でフォーマットされた顧客のデータがあります。
{
"name":"My Name",
"company":{
"id":9
}
}
私のエンティティは次のようになります:
@Entity
public class Customer {
@Id
Integer id;
String name;
@Reference
Company company;
/* getters and setters */
}
company
このデータを Jackson でデシリアライズし、 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;
}
}