jersey - json(jsonp 跨域)格式交互

JacksonFeature.class

在使用Tomcat作为HttpServer时,需要特别注意,实现java对象到json的解析时必须注册到JacksonFeature类,自己写的MyProvider不行。

//自己写MyProvider 不能用,不知道为什么
@Provider
public class MyProvider implements ContextResolver<ObjectMapper> {
	public ObjectMapper getContext(final Class<?> type) {
		final ObjectMapper mapper=new ObjectMapper();
		return mapper ;
	}
}

class JacksonFeature所在的jar为jersey-media-json-jackson-2.5.jar,这个jar只有它一个类。


它的maven依赖为:

<dependency>
	<groupId>org.glassfish.jersey.media</groupId>
	<artifactId>jersey-media-json-jackson</artifactId>
	<version>2.5</version>
</dependency>

主文件写法见下:

package com.likeyichu.webservice;

import org.glassfish.jersey.jackson.JacksonFeature;
import org.glassfish.jersey.server.ResourceConfig;

public class App extends ResourceConfig {
<span style="white-space:pre">	</span>public  App() {
<span style="white-space:pre">		</span>//向jersey框架注册资源类,凡完全限定名是以指定字符串开头的类,都将包含
<span style="white-space:pre">		</span>packages("com.likeyichu.webservice");
<span style="white-space:pre">		</span>register(JacksonFeature.class);
<span style="white-space:pre">	</span>}
}


getter()

要序列化为json的对象应该实现setter与getter方法。可以定义完成员变量后用Eclipse自动生成,见下图。


效果


注意

若一个类想要被序列化,必须有public 权限。
加@Produces标注的函数,函数名不要以“get”开头,不然jackson会无穷递归下去。

jersey-jsonp

@org.glassfish.jersey.server. JSONP
jersey框架帮我们返回jsonp格式的内容。一个实例:
@Path("jsonp")
	@GET
	@JSONP(queryParam="callback")//返回的函数名与http请求中的callback参数的值一致
	@Produces("application/x-javascript")  	//这里最好写成application/x-javascript
	public Student wsStudent2( ) {
		return new Student();
	}
效果:

jersey-post

@Path("post")
	@POST
	@Consumes(MediaType.APPLICATION_JSON)  //因为这行,wsStudent3()的形参remoteStudent会被jersey注入
	@Produces(MediaType.APPLICATION_JSON)
	public Student wsStudent3(Student remoteStudent) {
		Student student= new Student();
		student.setName(student.getName()+remoteStudent.getName());
		return student;
	}



  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值