2016-08-19 2 views
3

Ich bin neu in Java, Jersey und RESTful. Ich habe kürzlich das Jersey-Glas 2.23.2 und das Jersey-Medium Moxy 2.23.2 und die Java-Json-Bibliothek heruntergeladen.RESTful JSON mit Jersey 2.23.2

Ich sehe viele Beispiele in Google, aber meistens alle von ihnen unterscheiden sich. Es gibt kein genaues Beispiel, dem Sie folgen sollten. Ich habe versucht, es zu tun, aber immer noch nicht wissen, wie man den Beitrag konsumieren und Methoden mit HTTP-Client erhalten. Ich habe den folgenden Code veröffentlicht.

Auch habe ich den Postboten verwendet, um die codierten Methoden zu testen, aber ich bekomme einen Fehler auf die Post-Methode.

SEVERE: Servlet.service() for servlet [Service] in context with path [/com.myexample] threw exception [org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: javax/json/JsonException] with root cause 
java.lang.ClassNotFoundException: javax.json.JsonException 

Dies sind die Bibliotheken

enter image description here

Das ist mein web.xml

<?xml version="1.0" encoding="UTF-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> 
     <display-name>com.myexample</display-name> 
     <welcome-file-list> 
     <welcome-file>default.html</welcome-file> 
     </welcome-file-list> 

     <servlet> 
     <servlet-name>Service</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>jersey.config.server.provider.packages</param-name> 
      <param-value>com.myexample.resources<param-value> 
     </init-param> 
     <init-param> 
      <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
      <param-value>true</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
     </servlet> 
     <servlet-mapping> 
     <servlet-name>Service</servlet-name> 
     <url-pattern>/api/*</url-pattern> 
     </servlet-mapping> 
    </web-app> 

Dies ist die Klasse, die ich erstellt:

public class Employee { 

    private String firstName; 
    private String lastName; 

    public String getFirstName() { 
     return firstName; 
    } 
    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 
    public String getLastName() { 
     return lastName; 
    } 
    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    @Override 
    public String toString() { 
     return this.firstName + " " + this.lastName; 
    } 

} 

Diese ist die Steuerung/Ressource

package com.myexample.resources; 

import javax.ws.rs.Consumes; 
import javax.ws.rs.GET; 
import javax.ws.rs.POST; 
import javax.ws.rs.Path; 
import javax.ws.rs.Produces; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

import org.json.JSONException; 
import org.json.JSONObject; 

@Path("/test") 
public class MyResource { 


    @GET 
    @Path("getEmployee") 
    @Produces(MediaType.APPLICATION_JSON) 
    public Response getEmployee() throws JSONException{ 
     Employee employee = new Employee(); 
     employee.setFirstName("John"); 
     employee.setLastName("Smith"); 
     JSONObject json = new JSONObject(); 
     json.put("employee", employee); 
     return Response.status(200).entity(employee).build(); 
    } 


    @POST 
    @Path("postEmployee") 
    @Consumes(MediaType.APPLICATION_JSON) 
    public Response postEmployee(Employee employee) throws JSONException{ 
     return Response.status(200).entity(employee.toString()).build(); 
    } 
} 

Ich versuchte, meinen http-Client

public class TestClient { 

     public static void main(String[] args) { 
      try { 
       //POST 
       Client client = ClientBuilder.newClient(); 
       WebTarget webTarget = client.target("http://localhost:8080/com.myexample/api/test/postEmployee"); 
       Employee emp = new Employee(); 
       emp.setFirstName("John"); 
       emp.setLastName("Smith"); 


       Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); 
       //<--As it crashes the following line of this comment, I still don't know how to get my entity 
       Response response = invocationBuilder.post(Entity.entity(emp, MediaType.APPLICATION_JSON)); 
       //Employee emp = readEntity(Employee.class); //??? 
       } catch (Exception e) { 
       e.printStackTrace(); 
       } 

      //GET 
      try { 
       Client client = ClientBuilder.newClient(); 
       WebTarget webTarget = client.target("http://localhost:8080/com.myexample/api/test/getEmployee"); 
       Invocation.Builder invocationBuilder = webTarget.request(MediaType.APPLICATION_JSON); 
       Response response = invocationBuilder.get(); 
       //I get my response but how to deserialize the object 
       //Employee emp = (Employee)response.getEntity(); //CRASH, cannot cast    
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
     } 

} 

Wie ich weiß noch nicht, zu erstellen, wie das Objekt auf meinem Klienten zurückzuholen, aber ich benutzen Postbote den Controller zu testen .

Dies ist die Ausgabe von Get-Methode mit Postman. Es funktioniert

enter image description here

Dies ist die Ausgabe von post-Methode mit Postbote ist. Es funktioniert nicht

enter image description here

Dies ist voller Fehler

Aug 18, 2016 11:37:59 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [Service] in context with path [/com.myexample] threw exception [org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: javax/json/JsonException] with root cause 
java.lang.ClassNotFoundException: javax.json.JsonException 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1313) 
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1164) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.getNewXMLReader(SAXUnmarshaller.java:200) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.getXMLReader(SAXUnmarshaller.java:188) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:425) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:375) 
    at org.eclipse.persistence.internal.oxm.record.SAXUnmarshaller.unmarshal(SAXUnmarshaller.java:708) 
    at org.eclipse.persistence.internal.oxm.XMLUnmarshaller.unmarshal(XMLUnmarshaller.java:643) 
    at org.eclipse.persistence.jaxb.JAXBUnmarshaller.unmarshal(JAXBUnmarshaller.java:339) 
    at org.eclipse.persistence.jaxb.rs.MOXyJsonProvider.readFrom(MOXyJsonProvider.java:660) 
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.invokeReadFrom(ReaderInterceptorExecutor.java:256) 
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor$TerminalReaderInterceptor.aroundReadFrom(ReaderInterceptorExecutor.java:235) 
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155) 
    at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundReadFrom(MappableExceptionWrapperInterceptor.java:74) 
    at org.glassfish.jersey.message.internal.ReaderInterceptorExecutor.proceed(ReaderInterceptorExecutor.java:155) 
    at org.glassfish.jersey.message.internal.MessageBodyFactory.readFrom(MessageBodyFactory.java:1085) 
    at org.glassfish.jersey.message.internal.InboundMessageContext.readEntity(InboundMessageContext.java:874) 
    at org.glassfish.jersey.server.ContainerRequest.readEntity(ContainerRequest.java:271) 
    at org.glassfish.jersey.server.internal.inject.EntityParamValueFactoryProvider$EntityValueFactory.provide(EntityParamValueFactoryProvider.java:96) 
    at org.glassfish.jersey.server.spi.internal.ParamValueFactoryWithSource.provide(ParamValueFactoryWithSource.java:71) 
    at org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:94) 
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$AbstractMethodParamInvoker.getParamValues(JavaResourceMethodDispatcherProvider.java:127) 
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160) 
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) 
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) 
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) 
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) 
    at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) 
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) 
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) 
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) 
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) 
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) 
    at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:473) 
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:427) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:388) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:341) 
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:228) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) 
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1527) 
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1484) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    at java.lang.Thread.run(Unknown Source) 
+1

Maximus, können Sie umfassen die Implementierung Referenz Gläser hier: https://jsonp.java.net/download.html und versuchen Sie es erneut. –

+2

Hinzufügen http://www.java2s.com/Code/Jar/j/Downloadjavaxjson10jar.htm zu Ihren libs –

+0

Vielen Dank für Ihre Kommentare Jungs. Sehr geschätzt. Fast fast !!! Ich habe getan, was du gesagt hast, Ebrahim Pasbani, weil ich Maven nicht benutze. Jetzt stürzt der Tomcat nicht ab, aber ich bekomme den Fehler "HTTP-Status 400 - Schlechte Anfrage. Die vom Client gesendete Anfrage war syntaktisch falsch." –

Antwort

0

Sie benötigen den Trikot-media-mody des richtigen Abhängigkeiten auf der Jagd nach. Verwenden Sie https://jar-download.com/, um Abhängigkeiten aufzuspüren, obwohl es am besten ist, Maven zu verwenden, ist von jetzt an am besten, okay?

Seien Sie sehr spezifisch mit den Versionsnummern.

0

Vom Documentation,

Die gesuchten für Klassendefinition existiert, wenn die aktuell ausgeführten Klasse kompiliert wurde, aber die Definition nicht mehr gefunden werden kann.

Also, als Sie Ihren Krieg gebaut haben, wurde die fehlende Abhängigkeit nicht mit ihm verpackt.

Die bessere Option für Sie zu starten ist mit Maven. Erstellen Sie ein Maven-Projekt aus einem Archetyp.

Hier ist eine sehr einfache Anleitung, wie man Ruhe apis zu bauen, REST API EXAMPLE