在JavaEE应用程序中使用Jackson作为JAXB-JSON处理器
我已经看过很多关于这个问题的文章和SO问题 – 但是我觉得它没有成功。 我的目标是在JavaEE应用程序中使用Jackson作为JSON处理器。 到目前为止我有什么?
的pom.xml
-
这一个
org.glassfish.jersey.media jersey-media-json-jackson 2.17
-
还是这一个(到底哪一个是正确的?)
com.fasterxml.jackson.jaxrs jackson-jaxrs-json-provider 2.5.2
-
加上这个(由于这篇文章 ,因为jackson包中不再存在自动发现):
org.glassfish.jersey.ext jersey-metainf-services 2.17
web.xml中
简单的REST注册:
javax.ws.rs.core.Application 1 javax.ws.rs.core.Application /rest/*
一个简单的对象
import com.fasterxml.jackson.annotation.JsonProperty; public class Dummy { private String name; @JsonProperty("username") public String getName() { return name; } public void setName(String name) { this.name = name; } }
REST资源
@GET @Path("test") @Produces(MediaType.APPLICATION_JSON) public Response getRequest() { Dummy dummy = new Dummy(); dummy.setName("rolf"); return Response.ok(dummy).build(); }
输出是
{"name":"rolf"}
而不是预期的
{"username":"rolf"}
更新
我正在使用GlassFish应用程序服务器。
我的猜测是你在Glassfish上,它使用MOXy作为默认的JSON提供者。 您可以使用
禁用它。
jersey.config.server.disableMoxyJson true
jersey-media-json-jackson
具有可自动发现的function,应自动注册。 我不确定Glassfish的自动发现function,以及内部可能使用的较低版本的Jersey,如果它不会被注册。 但无论哪种方式,您为web.xml配置的方式是启用类路径扫描,因此无论如何都应该选择Jackson提供商。
一些FYI
-
jersey-media-json-jackson
实际上使用jackson-jaxrs-json-provider
。 它只是将它包装在JacksonFeature
,并允许自动发现它。 -
如果它仍然不起作用,您可以尝试创建一个function来处理注册和禁用。 例如
@Provider public class JsonFeature implements Feature { @Override public boolean configure(FeatureContext context) { context.property("jersey.config.server.disableMoxyJson", true); // this is in jersey-media-json-jackson context.register(JacksonFeature.class); // or from jackson-jaxrs-json-provider context.register(JacksonJsonProvider.class); // for JAXB annotation support context.register(JacksonJaxbJsonProvider.class); return true; } }
- 如何在不重写serialize方法的情况下覆盖特定类的JsonSerializer的isEmpty方法?
- jackson反序列化error handling
- 无法解析类型com.fasterxml.jackson.core.JsonGenerator。 它是从所需的.class文件间接引用的
- 如何告诉jackson在反序列化期间忽略空对象?
- 使用Jackson从JSON树中的特定节点映射对象
- 使用Jersey / JAXB / Jackson的Java.util.Map到JSON对象
- jaxrs找不到我的joda.money类型的自定义(de)序列化程序
- 使用JsonView将POJO转换为JsonNode
- Jackson2 PropertyFilter用于嵌套属性,还是有另一种方法?