一、 总体说明
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进入应用,如下:
7.运行项目,再次访问http://localhost:8089/RestDemo/rest/users/getUserJsonWay REST Service org.glassfish.jersey.servlet.ServletContainer javax.ws.rs.Application com.waylau.rest.RestApplication 1 Way REST Service /rest/*
即可输出JSON文本
