Jersey构建RESTful服务

Jersey构建RESTful服务

一、环境
1、myeclipse
2. Tomcat 7
3. JDK1.7
本文主要参考:https://blog.csdn.net/kkkloveyou/article/details/21391033

本文重点是jar包


以下本项目中使用的完整jar

这里写图片描述

重点 我根据参考文章构建RESTful服务总是报错,以下是错误总结:

  1. jar包很重要,jar包图片中标红的jar包一定要添加
  2. Unsupported major.minor version 52.0
    解决方案:一般是jar包版本和使用的jdk版本不一致,把jar包的版本换成低点的或者将 jdk换成高一点的版本, 51.0表示jar包需要在jkd1.7环境中,52.0表示jar包需要在jkd1.8环境中,以此类推

代码块


import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
 
@Path("/hello")
public class HelloResource {
	static Track track = null;
	@GET
	@Produces(MediaType.TEXT_PLAIN)
	public String sayHello() {
		return "Hello World!" ;
	}
 
	
	@GET
	@Path("/{param}")  
	@Produces("text/plain;charset=UTF-8")
	public String sayHelloToUTF8(@PathParam("param") String username) {
		return "Hello " + username;
	}
	
}

###web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
  <display-name></display-name>	
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  <servlet>    
    <servlet-name>RESTService</servlet-name>  
 <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>  
      <init-param>    
    <param-name>jersey.config.server.provider.packages</param-name>  
        <param-value>com.rest.resources</param-value>  
       </init-param>  
   <load-on-startup>1</load-on-startup>  
 </servlet>  
   
 <servlet-mapping>  
   <servlet-name>RESTService</servlet-name>  
   <url-pattern>/rest/*</url-pattern>  
 </servlet-mapping>  
</web-app>

测试

在浏览器地址中输入
http://localhost:8080/RestDemo/rest/hello/3
这里写图片描述
http://localhost:8080/RestDemo/rest/hello/
这里写图片描述

说明RESTFUL服务已经构建成功

支持json及XML

UserResource类

package com.rest.resources;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;

@Path("/users")
public class UserResource {
	private static Map<String,User> userMap = new HashMap<String,User>();//存储用户
	 @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() {  
     User user  = new User();  
     user.setAge("27");  
     user.setUserId("005");  
     user.setUserName("Fmand");  
     return 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("{id}")
    public void deleteStudent(@PathParam("id")String id){
    	userMap.remove(id);
    }
    
    /**
     * 修改
     * @param user
     */
    @PUT
    @Consumes(MediaType.APPLICATION_XML)
    public void updateStudent(User user){
		userMap.put(user.getUserId(), user );
    }

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

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

User类

package com.rest.resources;
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;
	}
}

RestApplication类(主要是用来转换成json输出的类)

package com.rest.resources;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import org.glassfish.jersey.filter.LoggingFilter;
import org.glassfish.jersey.server.ResourceConfig;

public class RestApplication extends ResourceConfig {
    public RestApplication() {
 
     //服务类所在的包路径
     packages("com.rest.resources");
     //注册JSON转换器
     register(JacksonJsonProvider.class);
 
    }
}

修改web.xml
把web.xml里的<servlet></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.rest.resources.RestApplication</param-value>  
      </init-param>  
    <load-on-startup>1</load-on-startup>  

在浏览器上测试一下
http://localhost:8080/RestDemo/rest/users
这里写图片描述

测试(新建测试项目,不要和服务端混在一起)

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;

public class UserClient {

	private static String serverUri = "http://localhost:8080/RestDemo/rest";

	/**
	 * @param args
	 */
	public static void main(String[] args) {
	addUser();
		getAllUsers();
		updateUser();
		getUserById();
		getAllUsers();
		delUser();
		getAllUsers();
	}
	
	
	/**
	 * 添加用户
	 */
	 private static void addUser() {
		 System.out.println("****增加用户addUser****");
		 User user = new User("006","Susan","21");  
		 Client client = ClientBuilder.newClient();
		 WebTarget target = client.target(serverUri + "/users");
		 Response response = target.request().buildPost(Entity.entity(user, MediaType.APPLICATION_XML)).invoke();
		 response.close();

    }
	 
	/**
	 * 删除用户
	 */
	 private static void delUser() {
		 System.out.println("****删除用户****");
		 Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);
		 WebTarget target = client.target(serverUri + "/users/008");
		 Response response = target.request().delete();
		 response.close();
	}
	 
	 
	/**
	 * 修改用户
	 */
	 private static void updateUser() {
		 System.out.println("****修改用户updateUser****");
		 User user = new User("006","Susan","33");  
		 Client client = ClientBuilder.newClient();
		 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() {
		 System.out.println("****根据id查询用户****");
		 Client client = ClientBuilder.newClient().register(JacksonJsonProvider.class);// 注册json 支持
		 WebTarget target = client.target(serverUri + "/users/006");
		 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 getAllUsers() {
		 System.out.println("****查询所有getAllUsers****");
		 Client client = ClientBuilder.newClient();
		 WebTarget target = client.target(serverUri + "/users");
		 Response response = target.request().get();
 		 String value = response.readEntity(String.class);
    	 System.out.println(value);
         response.close();  //关闭连接
	 }


}

控制台显示
这里写图片描述

###以上就是RESTful基本使用
###以下是RESTful基本知识点:
REST即Representational State Transfer的缩写,可译为"表现层状态转化”。
REST最大的几个特点为:资源、统一接口、URI和无状态。

**RESTful 架构风格概述可以参考这篇文章:**https://blog.igevin.info/posts/restful-architecture-in-general/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值