2016-11-17 70 views
1

我能够使用Json输出运行Jersey并且能够使用JSon映射获得“GET”请求而没有任何问题。泽西岛无法将json请求映射到类

我还具有分别为“POST”方法的一些JSON方法和它们在该方法中映射到Java类等 -

@POST 
@Consumes({MediaType.APPLICATION_JSON}) 
@Produces({MediaType.TEXT_PLAIN}) 
@Path("/post") 
public String postPerson(Person pers) 

为了便于参考我米导向herehere

以下

在给予这些有效的post请求,他们都开始抛出下面的错误 -

我的Maven依赖,pom.xml的是在问题的最终文件 -

exception 

javax.servlet.ServletException: java.lang.NullPointerException 
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:489) 
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 

root cause 

java.lang.NullPointerException 
newa.PersonResource.postPerson(PersonResource.java:31) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:498) 
org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) 
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) 
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161) 
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$TypeOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:205) 
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) 
org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) 
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) 
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) 
org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326) 
org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) 
org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) 
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) 
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393) 

Person类 -

@JsonInclude(Include.NON_EMPTY) 
public class Person {  
private String firstName; 
private String lastName; 
public void setLastName(String lastName) { 
    this.lastName = lastName; 
} 
public String getLastName() { 
    return lastName; 
} 
public String getFirstName() { 
    return firstName; 
} 
public void setFirstName(String firstName) { 
    this.firstName = firstName; 
} 
} 

我米使用邮差(Chrome扩展)发送的数据是在像 -

screenshot

我pom.xml文件 -

<dependencies> 


    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
     <scope>provided</scope> 
    </dependency> 



    <dependency> 
     <groupId>org.glassfish.jersey.containers</groupId> 
     <artifactId>jersey-container-servlet</artifactId> 
     <version>2.24</version> 
    </dependency> 

    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-jackson</artifactId> 
     <version>2.24</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-json-processing</artifactId> 
     <version>2.24</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-multipart</artifactId> 
     <version>2.24</version> 
    </dependency> 
    <dependency> 
     <groupId>org.glassfish.jersey.media</groupId> 
     <artifactId>jersey-media-sse</artifactId> 
     <version>2.24</version> 
    </dependency> 

    <dependency> 
     <groupId>com.sun.jersey</groupId> 
     <artifactId>jersey-core</artifactId> 
     <version>1.8</version> 
     <type>jar</type> 
    </dependency> 
</dependencies> 
+0

什么是在PersonResource的第31行? – rmlan

+0

它的pers.getFirstName()其中,pers是从方法参数(public String postPerson(Person pers))接收的Person对象。 –

+2

什么是您正在发送的json有效内容以及Person对象的外观? –

回答

1

从t的长相他邮递员的截图,它看起来像你正在发送表单数据,当你真的想要json(除非这是一种新的方式,你可以输入postman数据到POSTMAN。我只是试过,只能用这种方式输入form-data)。

前往邮递员,点击body标签,点击raw单选按钮,然后从右侧的下拉菜单中选择application/json。从那里,输入你的身体为json,看起来像这样:

{"firstName": "Bill", "lastName": "Loney"}