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:未被识别的领域,没有标记为可忽略