Java 带Jersey 2.23.2的RESTful JSON
我是爪哇岛、泽西岛和RESTful的新手。我最近下载了Jersey jar 2.23.2和Jersey media moxy 2.23.2以及java json库 我在谷歌看到了很多例子,但大多数都不同。没有一个确切的例子可以效仿。我尝试过这样做,但仍然不知道如何使用http客户端使用post和get方法。我把代码贴在下面 另外,我使用postman来测试编码的方法,但是在post方法上我得到了一个错误Java 带Jersey 2.23.2的RESTful JSON,java,json,rest,Java,Json,Rest,我是爪哇岛、泽西岛和RESTful的新手。我最近下载了Jersey jar 2.23.2和Jersey media moxy 2.23.2以及java json库 我在谷歌看到了很多例子,但大多数都不同。没有一个确切的例子可以效仿。我尝试过这样做,但仍然不知道如何使用http客户端使用post和get方法。我把代码贴在下面 另外,我使用postman来测试编码的方法,但是在post方法上我得到了一个错误 SEVERE: Servlet.service() for servlet [Service
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
这些是图书馆
这是我的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>
这是控制器/资源
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();
}
}
我试图创建我的http客户端
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();
}
}
}
你需要找到泽西媒体的正确依赖关系。用于查找依赖项,尽管最好从现在开始使用Maven,好吗 对版本号要非常具体 从 当前执行时已存在搜索的类定义 类已编译,但无法再找到该定义 因此,当您构建war时,缺少的依赖项没有打包 你最好从Maven开始。从原型创建maven项目 下面是一个关于如何构建rest API的非常简单的指南,
Maximus,能否在此处包含参考实现JAR:然后再试一次。请添加到您的库中,以便发表评论。非常感谢。差不多了!!!我照你说的做了,因为我不用Maven。现在Tomcat没有崩溃,但我得到了错误“HTTP状态400-错误请求。客户端发送的请求在语法上不正确。”我看到了错误。我正试图通过邮递员发送这个{“firstName\”:“John\”,“lastName\”:“Smith\”},而应该是:{“firstName”:“John”,“lastName”:“Smith”}。非常感谢你们。你的评论救了我。你应该把它作为答案贴出来。我仍然不知道如何使用http客户端获取我的对象,但我知道控制器正在工作。如何运行服务器?
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();
}
}
}
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)