2016-11-17 6 views
1

Json出力でJerseyを実行でき、問題なくJSonマッピングで「GET」リクエストを取得できます。ジャージーをクラスにマップすることができません

私はまた、「POST」メソッドだったいくつかのJSONのメソッドを持っていたし、彼らはこの方法のようにJavaクラスにマッピングされている - 私はガイドhereまたはhere

次mはあなたの参考のために

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

これらに対して有効な投稿要求を与えると、すべて下のエラーがスローされ始めました。 -

私の依存関係、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の拡張機能)を使用して送信mのデータは次のようにある -

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は、methodパラメータから受け取ったPersonオブジェクトです(public String postPerson(Person pers)) –

+2

送信しているjsonペイロードは何ですか、Personオブジェクトはどのように見えますか? –

答えて

1

ポストマンのスクリーンショットでは、実際にjsonが必要なときにフォームデータを送信しているように見えます(POSTMANにポストデータを入力できる新しい方法でない限り)。私はちょうど試して、この方法でフォームデータを入力することができました)。

bodyタブをクリックし、rawラジオボタンをクリックし、右側のプルダウンメニューからapplication/jsonを選択します。そこから、あなたの体をjsonとして入力してください。

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