写的过程经常出一些默名的异常:
java.lang.NoSuchFieldError: EXCLUDE_EMPTY
at org.glassfish.jersey.client.ClientConfig$State.<init>(ClientConfig.java:150)
at org.glassfish.jersey.client.ClientConfig.<init>(ClientConfig.java:468)
at org.glassfish.jersey.client.JerseyClientBuilder.<init>(JerseyClientBuilder.java:94)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:383)
at javax.ws.rs.client.FactoryFinder.newInstance(FactoryFinder.java:118)
at javax.ws.rs.client.FactoryFinder.find(FactoryFinder.java:225)
at javax.ws.rs.client.ClientBuilder.newBuilder(ClientBuilder.java:86)
at javax.ws.rs.client.ClientBuilder.newClient(ClientBuilder.java:114)
引出异常的代码:
public User getUser(String usermail, String userpswd) {
// TODO Auto-generated method stub
Client client=ClientBuilder.newClient();
WebTarget target = client.target(actionBaseUri);
Form form = new Form();
form.param("mail", usermail);
form.param("password", userpswd);
User u=target
.path("/user/login")
.request(MediaType.APPLICATION_XML_TYPE)
.post(
Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED_TYPE),
User.class);
return u;
}
主要原因是因为jar包不全或者冲突,我整理了一下,打成7z包传到我的资源中免大家再进同样的坑.Jersey client开发需要的jar, 开发环境需要java7+
以下是maven中的jersey客户端依赖
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.22</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-common</artifactId>
<version>2.22</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-jaxb</artifactId>
<version>2.22</version>
</dependency>
如果需要其它provide来处理媒体类型,可参考的: Chapter 9. Support for Common Media Type Representations
JSON可以使用jaxb,Jackson,MOXy,...
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-moxy</artifactId>
<version>2.22.2</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.22.2</version>
</dependency>
XML可以使用jaxb,MOXy
示例:
final Client client = ClientBuilder.newBuilder().register(JacksonFeature.class).build();
说明:
也可以使用JacksonFeature.class来request(MediaType.APPLICATION_XML_TYPE),但如果对象不是值对象(有关联其它类),
如果抛以下异常并导致系统负载加重
Caused by: java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1333)
at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1167)
... 67 more
要将jersey-client.jar移动服务端的类路径