【发布时间】:2015-06-24 06:06:33
【问题描述】:
我看过很多关于这个的文章和 SO-questions - 但我就是不明白。 我的目标是在 JavaEE 应用程序中使用 Jackson 作为 JSON 处理器。到目前为止我有什么?
pom.xml
-
这一个
<dependency> <groupId>org.glassfish.jersey.media</groupId> <artifactId>jersey-media-json-jackson</artifactId> <version>2.17</version> </dependency> -
还是这个(到底哪个是正确的?)
<dependency> <groupId>com.fasterxml.jackson.jaxrs</groupId> <artifactId>jackson-jaxrs-json-provider</artifactId> <version>2.5.2</version> </dependency> -
加上这个(由于this article,因为自动发现将不再存在于杰克逊包中):
<dependency> <groupId>org.glassfish.jersey.ext</groupId> <artifactId>jersey-metainf-services</artifactId> <version>2.17</version> </dependency>
web.xml
简单的 REST 注册:
<servlet>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>javax.ws.rs.core.Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
一个简单的对象
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 应用服务器。
【问题讨论】:
-
注意你实际使用的 JsonProperty 注解,this answer 提到,包坐标的两个选项。
-
@superbob 完全正确。但奇怪的是,这种变化是从新包到旧包的。杰克逊的 2.0 之前的过时版本有许多令人困惑的文章和 SO 问题。我已经更新了示例。
-
你试过玩ContextResolver吗?这个问题似乎很有趣:stackoverflow.com/questions/5005668/…
-
似乎根据底层的 JAX-RS 实现,您可能需要注册 JSON 映射器,例如 jersey 参见 jersey.java.net/nonav/documentation/latest/…
标签: java jaxb jersey jackson jax-rs