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; }
时间: 2024-10-26 12:11:28