我有一个消耗和生成JSON对象的RESTful服务,我希望Jersey使用Gson代替Jackson。
如何做到这一点......?
答案 0 :(得分:25)
您需要编写MessageBodyReader
和MessageBodyWriter
的自定义实现(可能在同一个类中)并向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)
您可以使用Holon平台JSON模块工件“ holon-gson-jaxrs”。
https://github.com/holon-platform/holon-json
https://mvnrepository.com/artifact/com.holon-platform.json/holon-gson-jaxrs