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"}