4

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;
    }
}
4

0 に答える 0