用Jersey构建RESTful服务3--JAVA对象转成JSON输出

一、 总体说明

XML和JSON 是最为常用的数据交换格式。本例子演示如何将java对象,转成JSON输出。

二、流程

1.在上文项目中,

在“com.waylau.rest.resources.UserResource“中增加代码,代码如下:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. @GET    
  2. @Path("/getUserJson")    
  3. @Produces(MediaType.APPLICATION_JSON)    
  4. public User getUserJson() {    
  5.  User user  = new User();    
  6.  user.setAge("27");    
  7.  user.setUserId("005");    
  8.  user.setUserName("Fmand");    
  9.  return user;    
  10. }   

MediaType.APPLICATION_JSON 说明输出的是JSON格式

2,运行项目,浏览器输入http://localhost:8089/RestDemo/rest/users/getUserJson

期望获取到json的数据,此时,项目报错

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. 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.  
  2.     at org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:247)  
  3.     at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)  
  4.     at org.glassfish.jersey.filter.LoggingFilter.aroundWriteTo(LoggingFilter.java:293)  
  5.     at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)  
  6.     at org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:103)  
  7.     at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)  
  8.     at org.glassfish.jersey.server.internal.MappableExceptionWrapperInterceptor.aroundWriteTo(MappableExceptionWrapperInterceptor.java:88)  
  9.     at org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)  
  10.     at org.glassfish.jersey.message.internal.MessageBodyFactory.writeTo(MessageBodyFactory.java:1154)  
  11.     at org.glassfish.jersey.server.ServerRuntime$Responder.writeResponse(ServerRuntime.java:571)  
  12.     at org.glassfish.jersey.server.ServerRuntime$Responder.processResponse(ServerRuntime.java:378)  
  13.     at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:368)  
  14.     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

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.waylau.rest;  
  2.   
  3. import org.codehaus.jackson.jaxrs.JacksonJsonProvider;  
  4. import org.glassfish.jersey.filter.LoggingFilter;  
  5. import org.glassfish.jersey.server.ResourceConfig;  
  6.    
  7. /** 
  8.  * 应用 
  9.  * @author waylau.com 
  10.  * 2014-3-18 
  11.  */  
  12. public class RestApplication extends ResourceConfig {  
  13.     public RestApplication() {  
  14.    
  15.      //服务类所在的包路径  
  16.      packages("com.waylau.rest.resources");  
  17.      //注册JSON转换器  
  18.      register(JacksonJsonProvider.class);  
  19.    
  20.     }  
  21. }  

6.修改web.xml,初始化从RestApplicaton进入应用,如下:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <servlet>    
  2.      <servlet-name>Way REST Service</servlet-name>  
  3.      <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>  
  4.       <init-param>  
  5.            <param-name>javax.ws.rs.Application</param-name>  
  6.            <param-value>com.waylau.rest.RestApplication</param-value>  
  7.        </init-param>  
  8.        
  9.     <load-on-startup>1</load-on-startup>  
  10.   </servlet>  
  11.     
  12.   <servlet-mapping>  
  13.     <servlet-name>Way REST Service</servlet-name>  
  14.     <url-pattern>/rest/*</url-pattern>  
  15.   </servlet-mapping>  
7.运行项目,再次访问 http://localhost:8089/RestDemo/rest/ users /getUserJson
即可输出JSON文本


code: http://pan.baidu.com/s/1sj0zGvV

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值