在测试 hugegraph 时,按照官方默认的Example Code 怎么都调用不通过,Debug 发现HTTPClient 发送的 PropertyKey 序列化 JSON 的时候无字段。
我的工程是实际项目中的,有大量的依赖无法去除。经过查看 PropertyKey 代码发现,JSON 绑定了 jackson 实现,对于Builder模式,FastJSON生成JSON一直都是不太智能的,初步怀疑是 fastjson 引起冲突。
java
public class PropertyKey extends SchemaElement {
@JsonProperty("data_type")
private DataType dataType;
@JsonProperty("cardinality")
private Cardinality cardinality;
@JsonProperty("aggregate_type")
private AggregateType aggregateType;
}
度娘了部分资料,原来是fastjson在1.2.36后,加入JerseyAutoDiscoverable的实现,在jersey启动的时候,会自动去加载FastJsonProvider。降级 fastjson 为 1.2.35,无问题。个人有点偏执,jersey 和 fastjson 都不想降级。查看 FastJsonAutoDiscoverable 代码发现有个 autoDiscover 开关:
java
public volatile static boolean autoDiscover = true;
@Override
public void configure(final FeatureContext context) {
final Configuration config = context.getConfiguration();
if (!config.isRegistered(FastJsonFeature.class) && autoDiscover) {
context.register(FastJsonFeature.class);
}
}
因此在 工程启动类加个静态代码域,把 autoDiscover 设置为 false,则问题解决。
java
static {
FastJsonAutoDiscoverable.autoDiscover = false;
}