关于json:Jersey 2.x使用Pojo作为POST的参数

Jersey 2.x using Pojo as Parameter for POST

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<dependency>
  <groupId>org.glassfish.jersey.ext</groupId>
  jersey-metainf-services</artifactId>
  <version>${jersey.version}</version>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.containers</groupId>
  jersey-container-servlet</artifactId>
</dependency>
<dependency>
  <groupId>org.glassfish.jersey.media</groupId>
  jersey-media-json-jackson</artifactId>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.jaxrs</groupId>
  jackson-jaxrs-json-provider</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  jackson-core</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  jackson-databind</artifactId>
  <version>${jackson.version}</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  jackson-annotations</artifactId>
  <version>${jackson.version}</version>
</dependency>

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

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

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

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

1
2
3
4
5
    <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,但我无法弄清楚如何做到这一点。


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

1
2
3
4
private String someString;

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

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

更改有效负载后,错误更改为此。
杰克逊与JSON:未被识别的领域,没有标记为可忽略