无废话Jersey构建RESTful服务之WebService系统教程 --3 [JAVA对象转成JSON输出]

一、 总体说明

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

二、流程

1.在上文项目中,

在“cn.itrush.rest.resources.UserResource“中增加代码,代码如下:

 1 package cn.itrush.rest.resources;
 2
 3 import java.util.ArrayList;
 4 import java.util.HashMap;
 5 import java.util.List;
 6 import java.util.Map;
 7
 8 import javax.ws.rs.Path;
 9 import javax.ws.rs.Produces;
10 import javax.ws.rs.PathParam;
11 import javax.ws.rs.core.MediaType;
12 import javax.ws.rs.DELETE;
13 import javax.ws.rs.GET;
14 import javax.ws.rs.POST;
15 import javax.ws.rs.PUT;
16
17 import cn.itrush.rest.bean.User;
18
19 /**
20  * 回嘉
21  * @author huiqinbo.cn
22  * 2016-8-24
23  */
24
25 @Path("/users")
26 public class UserResource {
27     private static Map<String,User> userMap = new HashMap<String,User>();//?洢?û?
28
29     /**
30      * 返回多节点XML格式文件
31      * @return
32      */
33     @GET
34     @Produces(MediaType.APPLICATION_XML)
35     public List<User> getAllUsers(){
36         List<User> users = new ArrayList<User>();
37         User u1 = new User("001","HuiJia","26");
38         User u2 = new User("002","Andy","23");
39         User u3 = new User("003","BoWen","21");
40
41         userMap.put(u1.getUserId(), u1);
42         userMap.put(u2.getUserId(), u2);
43         userMap.put(u3.getUserId(), u3);
44
45         users.addAll( userMap.values() );
46         return users;
47     }
48
49
50     /**
51      * 返回单节点XML格式文件
52      * @return
53      */
54     @GET
55     @Path("/getUserXml")
56     @Produces(MediaType.APPLICATION_XML)
57     public User getUserXml() {
58      User user  = new User();
59      user.setAge("21");
60      user.setUserId("004");
61      user.setUserName("回嘉");
62      return user;
63     }
64
65     /**
66      * 返回单节点Json格式文件
67      * @return
68      */
69     @GET
70     @Path("/getUserJson")
71     @Produces(MediaType.APPLICATION_JSON)
72     public User getUserJson(){
73         User user = new User();
74         user.setAge("30");
75         user.setUserId("2");
76         user.setUserName("回嘉");
77         return user;
78     }
79 }  

注:红色部分为新增J的AVA对象返回JSON 的代码,其它部分是第2节的内容

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

2,运行项目,浏览器输入http://localhost:8080/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 下载地址我是从CSND(http://download.csdn.net/detail/wind520/5674963)上面下载一个。

4. 项目中引入jackson-all-1.9.11.jar

注:将jackson-all-1.9.11.jar先放入项目工程的文件夹里,再刷新项目;如果直接放入项目内会报错

5.在“cn.itrush.rest”目录下创建RestApplication.java

 1 package cn.itrush.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 huiqinbo.cn
10  * 2016-8-24
11  */
12 public class RestApplication extends ResourceConfig {
13     public RestApplication() {
14
15      //服务类所在的包路径
16      packages("cn.itrush.rest.resources");
17      //注册JSON转换器
18      register(JacksonJsonProvider.class);
19
20     }
21 }  

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

<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID">
    <display-name>RestDemo</display-name>
    <welcome-file-list>
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
        <welcome-file>default.html</welcome-file>
        <welcome-file>default.htm</welcome-file>
        <welcome-file>default.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>Way REST Service</servlet-name>
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
          <init-param>
                <!-- <param-name>jersey.config.server.provider.packages</param-name>
                <param-value>cn.itrush.rest.resources</param-value> -->
                <param-name>javax.ws.rs.Application</param-name>
                   <param-value>cn.itrush.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>

</web-app>

注:注释部分是转换成XML时用的。下面是转换成JSON时用的。

7.运行项目,再次访问http://localhost:8080/RestDemo/rest/users/getUserJson
即可输出JSON文本

JSON格式里有乱码问题,以后再解决。

时间: 2024-08-11 09:06:53

无废话Jersey构建RESTful服务之WebService系统教程 --3 [JAVA对象转成JSON输出]的相关文章

用Jersey构建RESTful服务7--Jersey+SQLServer+Hibernate4.3+Spring3.2

一.整体说明 本例执行演示了用 Jersey 构建 RESTful 服务中.怎样集成 Spring3 二.环境 1.上文的项目RestDemo 2.Spring及其它相关的jar ,导入项目 三.配置 1.根文件夹下下创建 Spring 的配置文件applicationContext.xml: 配置例如以下: 四.执行 1.先执行项目 2.执行UserClient.java測试,控制台输出例如以下 ****添加用户addUser**** ****查询全部getAllUsers**** [{"us

用Jersey构建RESTful服务1--HelloWorld

本文具体代码实现参考自:http://blog.csdn.net/kkkloveyou/article/details/21391033,如有问题,请联系我. 本文仅仅是对原文做了一点补充,感谢原作者的精彩文章,对我帮助很大. 一,环境 IDE:myeclipse10 tomcat版本,jdk版本会在下一篇文章做详细说明. 二,项目的构建 在https://jersey.java.net/download.html中,可以发现两条很实用的mvn指令: 命令一:构建基于 Servlet conta

用Jersey构建RESTful服务简单示例,遭遇的tomcat和jdk的版本问题

当前环境: web工程的jdk: jdk1.6.0_43(x64) tomcat: apache-tomcat-7.0.53(x64) tomcat使用的jdk: jdk1.6.0_43(x64) 运行tomcat,控制台输出如下: 1 2016-7-21 9:23:15 org.apache.catalina.core.AprLifecycleListener init 2 信息: Loaded APR based Apache Tomcat Native library 1.1.29 usi

jersey+maven构建restful服务

一.新建一个Maven Web项目 a) 新建一个简单的Maven项目 b) 将简单的Maven项目转成Web项目 (若没出现further configuration available--或里面的内容不是context相关设置,将Dynamic Web Module版本调高一些试试就自动出现了) 二.修改pom文件,添加jersey依赖 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="htt

【用jersey构建REST服务】系列文章

1.用Jersey构建RESTful服务1--HelloWorld http://blog.csdn.NET/kkkloveyou/article/details/21391033 2.用Jersey构建RESTful服务2--JAVA对象转成XML输出 http://blog.csdn.Net/kkkloveyou/article/details/21415735 3.用Jersey构建RESTful服务3--JAVA对象转成JSON输出 http://blog.csdn.net/kkklov

Maven + Jetty + Jersey搭建RESTful服务

IntelliJ IDEA + Maven + Jetty + Jersey搭建RESTful服务 本文参考以下内容: 使用Jersey实现RESTful风格的webservice(一) Starting out with Jersey & Apache Tomcat using IntelliJ --------------------------------------------------正文------------------------------------------------

使用Spring MVC 4构建Restful服务

使用Spring MVC 4构建RESTful服务相对于其它框架来说,有很多优势.首先,Spring MVC 4作为Spring的框架之一,可以很好地与Spring进行集成.其次,Spring MVC 4的拦截器是在方法层级上的拦截,相对于其它MVC框架(如Struts2)的拦截器具有更高的效率.再者,Spring MVC 4采用基于注解的配置,入手容易,开发灵活. Spring MVC 4采用的是jacson解析JSON.jacson一款非常高效强大的JSON工具类,可以轻松地在JAVA对象与

使用ASP.Net WebAPI构建REST-ful 服务(一)——简单的示例

由于给予REST的Web服务非常简单易用,它越来越成为企业后端服务集成的首选方法.本文这里介绍一下如何通过微软的Asp.Net WebAPI快速构建REST-ful 服务. 首先创建一个Asp.Net Web应用程序(我这里用的是Visual Studio 2013,它已经内置了Web API2). 在出来的模板中选择Empty(空项目),并勾选WebAPI.点击确定后,就创建了一个空的WebAPI服务. 此时只有一个空项目,还没有任何功能,在进行下一步之前,首先我们来看一下REST的基本操作模

Springboot &amp; Mybatis 构建restful 服务四

Springboot & Mybatis 构建restful 服务四 1 前置条件 成功执行完Springboot & Mybatis 构建restful 服务三 2 restful service 添加 Apache POI生成 Excel 文件 1)修改 POM.xml文件 添加 Apache POI 的依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-oo