/**
- 注册共性扩展点 */ protected void registerProviders() { //基础扩展插件簇 register(MultiPartFeature.class); //use alibaba fastsjon register(FastJsonFeature.class); //register(JacksonObjectMapperProvider.class); //register(JacksonFeature.class); }
FastJsonFeature 代码如下:
public class FastJsonFeature implements Feature {
private final static String JSON_FEATURE = FastJsonFeature.class.getSimpleName();
@Override
public boolean configure(final FeatureContext context) {
final Configuration config = context.getConfiguration();
final String jsonFeature = CommonProperties.getValue(config.getProperties(), config.getRuntimeType(), InternalProperties.JSON_FEATURE, JSON_FEATURE,
String.class);
// Other JSON providers registered.
if (!JSON_FEATURE.equalsIgnoreCase(jsonFeature)) {
return false;
}
// Disable other JSON providers.
context.property(PropertiesHelper.getPropertyNameForRuntime(InternalProperties.JSON_FEATURE, config.getRuntimeType()), JSON_FEATURE);
// Register FastJson.
if (!config.isRegistered(FastJsonProvider.class)) {
FastJsonProvider fastJsonProvider = new FastJsonProvider();
FastJsonConfig fastJsonConfig=new FastJsonConfig();
fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.BrowserSecure);
fastJsonProvider.setFastJsonConfig(fastJsonConfig);
context.register(fastJsonProvider, MessageBodyReader.class, MessageBodyWriter.class);
}
return true;
}
}
为什么不直接在registerProviders方法中注册 register(FastJsonProvider.class); 而是 register(FastJsonFeature.class);是因为我在想定制失效循环检测特性以及开始浏览器安全特性,
如: FastJsonProvider fastJsonProvider = new FastJsonProvider(); FastJsonConfig fastJsonConfig=new FastJsonConfig(); fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.BrowserSecure); fastJsonProvider.setFastJsonConfig(fastJsonConfig); context.register(fastJsonProvider, MessageBodyReader.class, MessageBodyWriter.class);
上述代码我升级到1.2.36后,这个if语句里代码进不去了,我初步判断原因是:
1.2.36中FastJsonProvider默认被jersey发现注册了,替换到了默认的jackson序列化
而1.2.29版本中,是需要显示注册 register(FastJsonProvider.class);的
我想要的效果需要自己代码注册FastJsonProvider,除非默认自动注册的FastJsonProvider默认自带 fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.BrowserSecure); 这2个feature