Jersey基础知识学习过程记录(二)

  1. 总体说明

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

     2.流程

1.在上文的例子中,创建一个包“com.waylau.rest.bean”

2.在该包下创建一个JAVA类"User"


package com.waylau.rest.bean;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class User {
	
	private String userId;
	private String userName;
	private String age;
	
	public User() {};
	
	public User(String userId, String userName, String age) {
		this.userId = userId;
		this.userName = userName;
		this.age = age;
	}
	public String getUserId() {
		return userId;
	}
	public void setUserId(String userId) {
		this.userId = userId;
	}
	public String getUserName() {
		return userName;
	}
	public void setUserName(String userName) {
		this.userName = userName;
	}
	public String getAge() {
		return age;
	}
	public void setAge(String age) {
		this.age = age;
	}
}

注意:该类上面增加了一个注解“@XmlRootElement”,在将该类转化成XML时,说明这个是XML的根节点。

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

package com.waylau.rest.resources;

import java.util.*;

import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;

import com.waylau.rest.bean.User;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;

@Path("/users")
public class UserResource {
    private static Map<String, User> userMap = new HashMap<String, User>();//存储用户

    /**
     * 增加
     *
     * @param user
     */
    @POST
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public void createStudent(User user) {
        userMap.put(user.getUserId(), user);
    }

    /**
     * 删除
     *
     * @param id
     */
    @DELETE
    @Path("/del/{id}")
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public void deleteStudent(@PathParam("id") String id) {
        userMap.remove(id);
    }

    /**
     * 修改
     *
     * @param user
     */
    @PUT
    @Consumes({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public void updateStudent(User user) {
        userMap.put(user.getUserId(), user);
    }

    /**
     * 根据id查询
     *
     * @param id
     * @return
     */
    @GET
    @Path("/{id}")
    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    public User getUserById(@PathParam("id") String id) {
        User u = userMap.get(id);
        return u;
    }

    /**
     * 查询所有
     *
     * @return
     */
    @GET
//    @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
    @Produces({MediaType.APPLICATION_JSON})
    public List<User> getAllUser() {
        List<User> user = new ArrayList<User>();
        user.addAll(userMap.values());
        return user;
    }
//

    /**
     * 查询所有
     *
     * @return
     */
    @GET
    @Path("/getUserXml")
    @Produces(MediaType.APPLICATION_XML)
    public User getUserXml() {
        User user = new User();
        user.setAge("21");
        user.setUserId("004");
        user.setUserName("Amand");
        return user;
    }

    @GET
    @Path("/getUserJson")
    @Produces(MediaType.APPLICATION_JSON)
    public User getUserJson() throws JSONException {
        User user = new User();
        user.setUserId("05");
        user.setUserName("chenliu");
        user.setAge("30");
        return user;
    }
}

最后在客户端新建一个client类

package com.waylau.rest.client;

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import com.waylau.rest.bean.User;
import org.codehaus.jettison.json.JSONException;
import org.codehaus.jettison.json.JSONObject;


/**
 * 用户客户端,用来测试资源
 */
public class UserClient {

    private static String serverUri = "http://localhost:8080/api";
    /**
     * @param args
     */
    public static void main(String[] args) {
        addUser("01","zhangsan","15");
        addUser("02","lisi","20");
        addUser("03","wangwu","25");
        getUserById("02");
        System.out.println("----------------------");
        getAllUser();
//        getAllUser();
//        updateUser();

//        getAllUsers();
//        delUser();
//        getAllUsers();
    }
    /**
     * 添加用户
     */
    private static void addUser(String id,String name,String age) {
        System.out.println("****增加用户addUser****");
        User user = new User(id,name,age);
//        Client client = ClientBuilder.newClient();
        Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);   // 注册json 支持
        WebTarget target = client.target(serverUri + "/users");
        Response response = target.request().buildPost(Entity.entity(user, MediaType.APPLICATION_XML)).invoke();
//        User user1 = response.readEntity(User.class);
//        System.out.println(user1.getUserId() + user1.getUserName()  +  user1.getAge());
        System.out.println(response);
        response.close();
    }

    /**
     * 删除用户
     */
    private static void delUser(String id) {
        System.out.println("****删除用户****");
//        Client client = ClientBuilder.newClient();
        Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);   // 注册json 支持
        WebTarget target = client.target(serverUri + "/users/"+id);
        Response response = target.request().delete();
        response.close();
    }


    /**
     * 修改用户
     */
    private static void updateUser(String id,String name,String age) {
        System.out.println("****修改用户updateUser****");
        User user = new User(id,name,age);
//        Client client = ClientBuilder.newClient();
        Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);   // 注册json 支持
        WebTarget target = client.target(serverUri + "/users");
        Response response = target.request().buildPut( Entity.entity(user, MediaType.APPLICATION_XML)).invoke();
        response.close();
    }
    /**
     * 根据id查询用户
     */
    private static void getUserById(String id) {
        System.out.println("****根据id查询用户****");
        //Client client = ClientBuilder.newClient();
        Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);// 注册json 支持
        WebTarget target = client.target(serverUri + "/users/"+id);
        Response response = target.request().get();
        User user = response.readEntity(User.class);
        System.out.println(user.getUserId() + user.getUserName()  +  user.getAge());
        response.close();
    }
    /**
     * 查询所有用户
     */
    private static void getAllUser() {
        System.out.println("****查询所有getAllUsers****");
        Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);// 注册json 支持
            WebTarget target = client.target(serverUri + "/users");
            Response response = target.request().get();
            String value = response.readEntity(String.class);
            JSONObject ab = JSONObject.fromObject(value);
            System.out.println();


// System.out.println(user.getUserId() + user.getUserName() + user.getAge());
//        }
        response.close();
    }

}

其中MediaType.APPLICATION_XML 说明了是以XML形式输出

在浏览器输入http://localhost:8080/api/users/getUserXml,输出单个对象

在浏览器输入 http://localhost:8080/api/users  输出对象的集合

------------------------------------------------------------------------------------------------

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格式

如果此时和xml一样的输入网址.则会报错,这是因为需要获取json转换包的支持 

综合许多博客经验,都是选择 jackson-all-1.9.11.jar,而这个包比较难找,特存网盘中(链接: https://pan.baidu.com/s/1b49HiY 密码: e33e),项目中引入jackson-all-1.9.11.jar

2在“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);
 
    }
}

3 修改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>/api/*</url-pattern>
  </servlet-mapping>

4 运行项目,再次访问http://localhost:8080/api//users/getUserJson
即可输出JSON文本.不同浏览器出现的结果不同,这一步骤也许会出现各种各样的错误,应该是由于操作问题,请细心练习.

转载于:https://my.oschina.net/112612/blog/1576396

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值