Jersey 2.x使用Pojo作为POST的参数

时间:2014-11-06 23:31:25

标签: json maven tomcat pojo jersey-2.0

我在尝试使用POJOS作为参数时遇到了一些NPE问题。 我正在使用默认配置将war maven生成部署到tomcat 7。

我方法的签名看起来像这样。

@POST
@Produces({MediaType.APPLICATION_JSON})
@Consumes({MediaType.APPLICATION_JSON})
@Path("/do/")
public OtherPojo doSomething(MyPOJO pojo) {

Pojo用@XmlRootElement注释 但是当我调用url时,pojo为null,因此我获得了NPE。 我的pom.xml

<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  <artifactId>jersey-metainf-services</artifactId>
  <version>${jersey.version}</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  <artifactId>jersey-container-servlet</artifactId>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  <artifactId>jersey-media-json-jackson</artifactId>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  <artifactId>jackson-jaxrs-json-provider</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>${jackson.version}</version>
</dependency>

我已经尝试过球衣2.13和2.6 和杰克逊2.4

另外我没有设置应用程序,我的类只有注释

@Path("/somePath/")
public class SomeClass {

这是在我的web.xml中配置的

    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages</param-name>
        <param-value>com.beer.routes</param-value>
    </init-param>

我读过我可能需要注册JacksonFeature,但我无法弄清楚如何做到这一点。

1 个答案:

答案 0 :(得分:1)

经过进一步审核,上面的代码运行正常。 问题是在调用类时,我使用较小的名称发送有效负载。 POJO看起来像

private String someString;

public void getSomeString() { ... }
public String setSomeString (String s) {...}

我的有效负载中的问题是我发送“someString”而不是“SomeString”。 这是非常相关的,因为它是我的对象被接收为null的原因。

更改有效负载后,错误更改为此。 Jackson with JSON: Unrecognized field, not marked as ignorable