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

2014-11-24 01:00:20 · 作者: · 浏览: 0

一、 总体说明

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转换包的支持 。< http://www.2cto.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+v8nS1NPJtuDW1re9yr3Ktc/Wo7pNT1h5oaJKU09OLVChokphY2tzb26hokpldHRpc29utcijrLG+wP3OqkphY2tzb26hozwvcD4KPHA+My4gamFja3Nvbi1hbGwtMS45LjExLmphciDPwtTYtdjWt2h0dHA6Ly93aWtpLmZhc3RlcnhtbC5jb20vSmFja3NvbkRvd25sb2FkPC9wPgo8cD40LiDP7sS/1tDS/cjramFja3Nvbi1hbGwtMS45LjExLmphcjwvcD4KPHA+NS7U2qGwY29tLndheWxhdS5yZXN0obHEv8K8z8K0tL2oUmVzdEFwcGxpY2F0aW9uLmphdmE8L3A+CjxwPjxwcmUgY2xhc3M9"brush: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进入应用,如下:

    
     
   
    Way REST Service
   
	 
   
    org.glassfish.jersey.servlet.ServletContainer
   
	  
    
    
     javax.ws.rs.Application
     
    
     com.waylau.rest.RestApplication
     
   
	 
    
   
    1
   
  
  
  
  
  
    
   
    Way REST Service
   
    
   
    /rest/*
   
  
  
7.运行项目,再次访问http://localhost:8089/RestDemo/rest/users/getUserJson
即可输出JSON文本