Java 使用@JsonCreator和@JsonProperty时出现NullPointerException

Java 使用@JsonCreator和@JsonProperty时出现NullPointerException,java,json,angularjs,jersey,jackson,Java,Json,Angularjs,Jersey,Jackson,我有一个RESTfulAPI的Java项目,我使用Jackson/jersey来处理从支持AngularJS的web应用程序发送的传入JSON POST数据 我们通过Maven在1.8版中使用jersey json,因为这是我们公司推荐的版本 下一节课一切顺利 public class POST_WorkitemInfo { public String workitem; public String workflow; public String taskname;

我有一个RESTfulAPI的Java项目,我使用Jackson/jersey来处理从支持AngularJS的web应用程序发送的传入JSON POST数据

我们通过Maven在1.8版中使用jersey json,因为这是我们公司推荐的版本

下一节课一切顺利

public class POST_WorkitemInfo {
    public String workitem;
    public String workflow;
    public String taskname;
    public String force;
}
即使我们决定使用带有空构造函数和公共setter的私有成员,它仍然可以正常工作

但是我们希望这个类是不可变的。经过一些研究,我发现我可以通过使用@JsonCreator和@JsonProperty实现这一点,如下所示:

private final String workitem;
private final String workflow;
private final String taskname;
private final String force;

@JsonCreator
public POST_WorkitemInfo(@JsonProperty("workitem") String workitem, @JsonProperty("workflow") String workflow,
                         @JsonProperty("taskname") String taskname, @JsonProperty("force") String force) {
    this.workitem = workitem;
    this.workflow = workflow;
    this.taskname = taskname;
    this.force = force;
}
但现在对API的调用失败,出现NullPointerException:

java.lang.NullPointerException
org.codehaus.jackson.xc.JaxbAnnotationIntrospector.findAnnotation(JaxbAnnotationIntrospector.java:860)
org.codehaus.jackson.xc.JaxbAnnotationIntrospector._typeResolverFromXmlElements(JaxbAnnotationIntrospector.java:318)
org.codehaus.jackson.xc.JaxbAnnotationIntrospector.findPropertyTypeResolver(JaxbAnnotationIntrospector.java:296)
org.codehaus.jackson.map.AnnotationIntrospector$Pair.findPropertyTypeResolver(AnnotationIntrospector.java:928)
org.codehaus.jackson.map.deser.BasicDeserializerFactory.findPropertyTypeDeserializer(BasicDeserializerFactory.java:502)
org.codehaus.jackson.map.deser.BasicDeserializerFactory.resolveType(BasicDeserializerFactory.java:692)
org.codehaus.jackson.map.deser.BasicDeserializerFactory.constructCreatorProperty(BasicDeserializerFactory.java:787)
org.codehaus.jackson.map.deser.BeanDeserializerFactory._addDeserializerConstructors(BeanDeserializerFactory.java:590)
org.codehaus.jackson.map.deser.BeanDeserializerFactory.findDeserializerCreators(BeanDeserializerFactory.java:524)
org.codehaus.jackson.map.deser.BeanDeserializerFactory.buildBeanDeserializer(BeanDeserializerFactory.java:393)
org.codehaus.jackson.map.deser.BeanDeserializerFactory.createBeanDeserializer(BeanDeserializerFactory.java:370)
org.codehaus.jackson.map.deser.StdDeserializerProvider._createDeserializer(StdDeserializerProvider.java:359)
org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCache2(StdDeserializerProvider.java:281)
org.codehaus.jackson.map.deser.StdDeserializerProvider._createAndCacheValueDeserializer(StdDeserializerProvider.java:261)
org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:119)
org.codehaus.jackson.map.deser.StdDeserializerProvider.findTypedValueDeserializer(StdDeserializerProvider.java:140)
org.codehaus.jackson.map.ObjectMapper._findRootDeserializer(ObjectMapper.java:2197)
org.codehaus.jackson.map.ObjectMapper._readValue(ObjectMapper.java:2112)
org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.java:1004)
org.codehaus.jackson.jaxrs.JacksonJsonProvider.readFrom(JacksonJsonProvider.java:410)
com.sun.jersey.spi.container.ContainerRequest.getEntity(ContainerRequest.java:474)
com.sun.jersey.server.impl.model.method.dispatch.EntityParamDispatchProvider$EntityInjectable.getValue(EntityParamDispatchProvider.java:123)
com.sun.jersey.server.impl.inject.InjectableValuesProvider.getInjectableValues(InjectableValuesProvider.java:46)
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$EntityParamInInvoker.getParams(AbstractResourceMethodDispatchProvider.java:153)
com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$ResponseOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:203)
com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:75)
com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:288)
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:108)
com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:147)
com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:84)
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1469)
com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1400)
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1349)
com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1339)
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:416)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
javax.servlet.http.HttpServlet.service(HttpServlet.java:727)

我错过了什么?我需要添加更多注释吗?

我们已迁移到jersey版本1.19

将依赖项添加到jersey servlet后,一切正常,包括带有@JsonCreator和@JsonProperty的不可变类


该死!1.8是一个老版本,但我相信你已经知道了。我试着看一看它在grepcode失败的那行代码,希望它通过查看您的代码给出一个提示,不知道。。。您能提供您用于jar org.codehaus.jackson的版本吗?通过查看jersey json 1.8 pom,它指向1.1,但在该版本的JaxbAnnotationIntrospector中没有第860行。。。。这肯定是我的错。你能发布你正在使用的版本吗?对不起,我正在度假。。。我们使用的是杰克森1.7.1版,希望您假期过得愉快!好的,我在grepcode中找不到1.7.1,最接近的是1.7.0,事实上在该版本中,空指针更有意义,第860行可能有空指针。不过也没什么道理。您确定您的依赖项是一致的吗?也许你可以发布你的pom.xml?这是一个疯狂的猜测,但我要说的是,你对杰克逊的版本对于你对泽西的版本来说太新了。希望有帮助。好的,我会检查一下。。。但公司架构师今天会给我们一些时间来测试jersey的1.19版。也许这个问题会消失,在深入研究这个问题之前,我会先用1.19进行确认。。。祝你好运
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-server</artifactId>
    <version>1.19</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-json</artifactId>
    <version>1.19</version>
</dependency>
<dependency>
    <groupId>com.sun.jersey</groupId>
    <artifactId>jersey-servlet</artifactId>
    <version>1.19</version>
</dependency>