使用FastJson作为JAX-RS的序列化/反序列化框架

FastJson是阿里巴巴的温少开发的一个JSON的序列化和反序列化的框架。 我前面的文章: Java序列化框架性能比较中也提到, 我使用第三方的序列化测试框架jvm-serializers表明, FastJson是最快的JSON序列化框架之一, 优于Jackson。

JAX-RS是一个Java编程语言的应用程序接口,支持按照 表象化状态转变 (REST)架构风格创建Web服务Web服务. JAX-RS使用了Java SE 5引入的Java 标注来简化Web服务客户端和服务端的开发和部署。
JAX-RS的实现包括:

  • Apache CXF,开源的Web服务框架。
  • Jersey, 由Sun提供的JAX-RS的参考实现。
  • RESTEasy,JBoss的实现。
  • Restlet,由Jerome Louvel和Dave Pawson开发,是最早的REST框架,先于JAX-RS出现。
  • Apache Wink,一个Apache软件基金会孵化器中的项目,其服务模块实现JAX-RS规范

如果项目中使用JAX-RS传递JSON格式的数据, 可以利用FastJson提高序列化的性能。 但是FastJson并没有提供JAX-RS的集成( Issue #65, Issue #138 )。

我实现了一个FastJson的JAX-RS集成框架: fastjson-jaxrs-json-provider,可以方便在在JAX-RS项目中使用。

前言

FastJsonProvider is a standard entity provider that follows JAX-RS 2.0 spec.
According to different JAX-RS implementations such as CXF, Jersey, maybe you use FastJsonProvider in appropriate styles.
FastJsonProvider can serialize/deserialize specific types including:

  • all types: public FastJsonProvider() (default constructor)
  • all type annotated with FastJsonType: public FastJsonProvider(boolean annotated)
  • all type annotated in specific packages : public FastJsonProvider(String[] scanpackages)
  • all type annotated in specific packages with FastJsonType: public FastJsonProvider(String[] scanpackages, boolean annotated)
  • all type in specific classes: public FastJsonProvider(Class<?>[] clazzes)

You can init this provider instance with a FastJsonConfig object which is used to configure FastJson features, SerializeConfig, ParserConfig and SerializeFilter. Any parameters can be null and will be default.

Maven

stable version: 0.1.0

1
2
3
4
5
<dependency>
<groupId>com.colobu</groupId>
<artifactId>fastjson-jaxrs-json-provider</artifactId>
<version>0.1.0</version>
<dependency>

snapshot version: 0.2.0-0.2.0-SNAPSHOT

1
2
3
4
5
<dependency>
<groupId>com.colobu</groupId>
<artifactId>fastjson-jaxrs-json-provider</artifactId>
<version>0.2.0-SNAPSHOT</version>
<dependency>

Jersey configuration

Please check the test and maybe you need to create a FastJsonFeature to override MessageBodyReader and MessageBodyWriter.

CXF confguration

You can use JAXRSServerFactoryBean.setProviders to add a FastJsonProvider instance.