2016-11-17 1 views
1

Я могу запустить Джерси с выходом Json и получить без проблем любые запросы «GET» с JSon.Джерси не в состоянии отобразить запрос json на класс

я также иметь некоторые методы JSON, которые были «POST» методы и их отображение на классы Java, как в этом методе -

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

Для справки я м после руководства here или here

При подаче действительного почтового запроса на них все они начали выдавать ошибку ниже:

Мои 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) 

Человек класс -

@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

Что находится в строке 31 PersonResource? – rmlan

+0

его pers.getFirstName() где pers - это объект Person, полученный из параметра метода (public String postPerson (Person pers)) –

+2

Какова полезная нагрузка json, которую вы отправляете, и на что похож объект Person? –

ответ

1

От взглядов postman screenshot, похоже, что вы отправляете данные формы, когда вы действительно хотите json (если это не новый способ, вы можете вводить данные post в POSTMAN. Я просто попробовал и мог только вводить данные формы таким образом).

Перейдите к почтальону, перейдите на вкладку body, нажмите переключатель raw, затем выберите application/json из выпадающего меню справа. Оттуда введите ваше тело как json, которое будет выглядеть примерно так:

{"firstName": "Bill", "lastName": "Loney"} 
Смежные вопросы