使用jersey(2.5.1)编写Java REST客户端

7 篇文章 0 订阅
6 篇文章 0 订阅

写的过程经常出一些默名的异常:

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移动服务端的类路径

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值