4

我有一个用 JSON 格式的客户数据:

{
    "name":"My Name",
    "company":{
        "id":9
    }
}

我的实体看起来像:

@Entity
public class Customer {
    @Id
    Integer id;

    String name;

    @Reference
    Company company;

    /* getters and setters */
}

我想用 Jackson 反序列化这些数据并获得companyvia的参考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