开发者社区> yichudu> 正文

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

简介: JacksonFeature.class 在使用Tomcat作为HttpServer时,需要特别注意,实现java对象到json的解析时必须注册到JacksonFeature类,自己写的MyProvider不行。 //自己写MyProvider 不能用,不知道为什么 @Provider public class MyProvider implements ContextResolv
+关注继续查看

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;
	}



版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
说说JSON和JSONP,也许你会豁然开朗
JSON(JavaScript Object Notation) 和 JSONP(JSON with Padding) 虽然只有一个字母的差别,但其实他们根本不是一回事儿:JSON是一种数据交换格式,而JSONP是一种依靠开发人员的聪明才智创造出的一种非官方跨域数据交互协议。
1156 0
Spring Boot 实现json和jsonp格式数据接口
Spring boot 实现json和jsonp格式数据接口 1.新建一个类继承AbstractJsonpResponseBodyAdvice,重写父类构造方法, 传入callback和jsonp参数。
1919 0
说说JSON和JSONP,也许你会豁然开朗,含jQuery用例
 前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域可以通过服务器端代理来解决。
912 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载