一、 总体说明
XML和JSON 是最为常用的数据交换格式。本例子演示如何将java对象,转成JSON输出。
二、流程
1.在上文项目中,
在“com.waylau.rest.resources.UserResource“中增加代码,代码如下:
- @GET
- @Path("/getUserJson")
- @Produces(MediaType.APPLICATION_JSON)
- public User getUserJson() {
- User user = new User();
- user.setAge("27");
- user.setUserId("005");
- user.setUserName("Fmand");
- return user;
- }
MediaType.APPLICATION_JSON 说明输出的是JSON格式
2,运行项目,浏览器输入http://localhost:8089/RestDemo/rest/users/getUserJson
期望获取到json的数据,此时,项目报错
- org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/json, type=class com.waylau.rest.bean.User, genericType=class com.waylau.rest.bean.User.
- at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:247)
- at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
- at org.glassfish.jersey.filter.LoggingFilter.aroundWriteTo(LoggingFilter.java:293)
- at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
- at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:103)
- at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
- at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:88)
- at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
- at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1154)
- at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:571)
- at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:378)
- at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:368)
- at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:262)
此时,需要获取json转换包的支持 。
可以由多种方式实现:MOXy、JSON-P、Jackson、Jettison等,本例为Jackson。
3. jackson-all-1.9.11.jar 下载地址http://wiki.fasterxml.com/JacksonDownload
4. 项目中引入jackson-all-1.9.11.jar
5.在“com.waylau.rest”目录下创建RestApplication.java
- package com.waylau.rest;
- import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
- import org.glassfish.jersey.filter.LoggingFilter;
- import org.glassfish.jersey.server.ResourceConfig;
- /**
- * 应用
- * @author waylau.com
- * 2014-3-18
- */
- public class RestApplication extends ResourceConfig {
- public RestApplication() {
- //服务类所在的包路径
- packages("com.waylau.rest.resources");
- //注册JSON转换器
- register(JacksonJsonProvider.class);
- }
- }
6.修改web.xml,初始化从RestApplicaton进入应用,如下:
- <servlet>
- <servlet-name>Way REST Service</servlet-name>
- <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
- <init-param>
- <param-name>javax.ws.rs.Application</param-name>
- <param-value>com.waylau.rest.RestApplication</param-value>
- </init-param>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>Way REST Service</servlet-name>
- <url-pattern>/rest/*</url-pattern>
- </servlet-mapping>
即可输出JSON文本
code: http://pan.baidu.com/s/1sj0zGvV