在泽西使用Gson代替杰克逊

时间:2012-03-01 12:26:18

标签: jaxb jersey jax-rs jackson gson

我有一个消耗和生成JSON对象的RESTful服务,我希望Jersey使用Gson代替Jackson。

如何做到这一点......?

5 个答案:

答案 0 :(得分:25)

您需要编写MessageBodyReaderMessageBodyWriter的自定义实现(可能在同一个类中)并向Jersey注册(如果使用包扫描,@Provider注释就足够了) - - 非常像JacksonJsonProvider这样做:

@Provider
@Consumes({MediaType.APPLICATION_JSON, "text/json"})
@Produces({MediaType.APPLICATION_JSON, "text/json"})
class GsonJsonProvider implements
    MessageBodyReader<Object>,
    MessageBodyWriter<Object> { ...

答案 1 :(得分:21)

您可以在此处找到一个完整的示例:https://github.com/DominikAngerer/java-GsonJerseyProvider

http://eclipsesource.com/blogs/2012/11/02/integrating-gson-into-a-jax-rs-based-application/会有一个有效的实施,但会有一些新的成就 - 比如只有GsonUtil的{​​{1}}。

Expose

答案 2 :(得分:2)

我很难让我的自定义Gson @Provider使用在GlassFish / Payara中嵌入的Jersey。在这种情况下,您必须将属性jersey.config.server.disableMoxyJson设置为true

例如:

@ApplicationPath("/api")
public class MyApplication extends Application {
    @Override
    public Map<String, Object> getProperties() {
        Map<String, Object> props = new HashMap<>();
        props.put("jersey.config.server.disableMoxyJson", true);
        return props;
    }
}

另见:

泽西岛客户也是如此:

new ClientConfig()
        .register(MyGsonProvider.class)
        .property("jersey.config.client.disableMoxyJson", true);

答案 3 :(得分:1)

你应该解决只是在你的pom中添加这种依赖

<dependency>
    <groupId>org.zalando.phrs</groupId>
    <artifactId>jersey-media-json-gson</artifactId>
    <version>0.1</version>
</dependency>

在这里,您可以找到包含源代码的仓库:https://github.com/zalando/jersey-media-json-gson

答案 4 :(得分:0)