zoukankan      html  css  js  c++  java
  • Rest之路

    在 Eclipse 里新建一个 Dynamic project 

    将 Jersey 的 jar 包,拷贝到 WebContent -> WEB-INF -> lib 文件夹

    Add jars to "build path"

     

    根据业务层次编写程序

     

    User

    package com.example.tuo.rest.entity;
    
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement(name="user")
    public class User {
    
    	private int id;
    	private String name;
    	private String profession;
    	
    	public int getId() {
    		return id;
    	}
    	//@XmlElement
    	public void setId(int id) {
    		this.id = id;
    	}
    	public String getName() {
    		return name;
    	}
    	//@XmlElement
    	public void setName(String name) {
    		this.name = name;
    	}
    	public String getProfession() {
    		return profession;
    	}
    	//@XmlElement
    	public void setProfession(String profession) {
    		this.profession = profession;
    	}
    	public User() {
    		super();
    		// TODO Auto-generated constructor stub
    	}
    	public User(int id, String name, String profession) {
    		super();
    		this.id = id;
    		this.name = name;
    		this.profession = profession;
    	}
    	
    	
    }
    

    P.S 由于后面使用XML格式进行数据展现,在这里使用了@XMLRootElement和@XMLElement 注解。

    UserDao

    package com.example.tuo.rest.dao;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import com.example.tuo.rest.entity.User;
    
    public class UserDao {
    
    	private final String CONFIG_FILE = "D:/User.dat";
    	
    	public List<User> getAllUsers()
    	{
    		List<User> uList = null;
    		
    		File file = new File(CONFIG_FILE);
    		if(!file.exists()){
    			User u = new User(1,"tuo","software engineer");
    			uList= new ArrayList<User>();
    			uList.add(u);
    			saveUserList(uList);
    		}
    		else{
    			FileInputStream in = null;
    			ObjectInputStream oin = null;
    			try {
    				in = new FileInputStream(file);
    				oin = new ObjectInputStream(in);
    				uList=(List<User>) oin.readObject();
    			} catch (FileNotFoundException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (IOException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			} catch (ClassNotFoundException e) {
    				// TODO Auto-generated catch block
    				e.printStackTrace();
    			}
    			finally{
    				try {
    					if(oin != null)
    						oin.close();
    					if(in != null)
    						in.close();
    				} catch (IOException e) {
    					// TODO Auto-generated catch block
    					e.printStackTrace();
    				}
    				
    			}
    		}
    		
    		return uList;
    	}
    	
    	private void saveUserList(List<User> userList){
    	      try {
    	         File file = new File(CONFIG_FILE);
    	         FileOutputStream fos;
    
    	         fos = new FileOutputStream(file);
    
    	         ObjectOutputStream oos = new ObjectOutputStream(fos);
    	         oos.writeObject(userList);
    	         oos.close();
    	      } catch (FileNotFoundException e) {
    	         e.printStackTrace();
    	      } catch (IOException e) {
    	         e.printStackTrace();
    	      }
    	   }   
    }
    

    在这里,使用了一个在磁盘上的文件作模拟数据库的存储

    UserService

    package com.example.tuo.rest.service;
    
    import java.util.List;
    
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    import com.example.tuo.rest.dao.UserDao;
    import com.example.tuo.rest.entity.User;
    
    @Path("/UserService")
    public class UserService {
    
    	private UserDao userDao = new UserDao();
    	
    	@GET
    	@Path("/users")
    	@Produces(MediaType.APPLICATION_XML)
    	public List<User> getAllUsers(){
    		return userDao.getAllUsers();
    	}
    }
    

    使用 @Path 注解,制定了 Rest 的路径(完整路径为:project/class/method)

    使用 @GET 注解,标识 Rest 方法的类型

    使用 @Produces(MediaType.APPLICATION_XML) 注解,标识数据表现的格式为 XML

    修改 Web.xml configuration File

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
      <display-name>FirstHeadRestfulWebService</display-name>
      
      <servlet>
      	<servlet-name>My Jersey restful 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>com.example.tuo.rest.service</param-value>
             </init-param>
      </servlet>
      <servlet-mapping>
      	<servlet-name>My Jersey restful service</servlet-name>
      	<url-pattern>/rest/*</url-pattern>
      </servlet-mapping>
      
    </web-app>
    

     注: 橙色部分表明需要扫描的包, 即 service 所在的 package

    启动Rest服务并且验证

    输入rest 服务地址 http://localhost:8080/FirstHeadRestfulWebService/rest/UserService/users

    FirstHeadRestfulWebService - 项目目录(名称)

    rest - web.xml配置的根目录

    UserService/users - Class 路径 + Method 路径

  • 相关阅读:
    叉姐的魔法训练(第十课)---- 幽默大师卫冕战
    叉姐的魔法训练(第⑨课)---- 幽默大师职业赛
    叉姐的魔法训练(第八课)---- 幽默术
    叉姐的魔法训练(第七课)---- 在沙漠中的长途旅行
    叉姐的魔法训练(第六课)---- 暴雨术入门
    叉姐的魔法训练(第五课)---- 如何成为一名合格的小学生
    叉姐的魔法训练(第四课)---- 风系魔法的基本要领
    叉姐的魔法训练(第三课)---- 火球术入门
    叉姐的魔法训练(第二课)---- 冰系魔法入门
    叉姐的魔法训练(第一课)---- 初级魔法练习
  • 原文地址:https://www.cnblogs.com/atuotuo/p/6284279.html
Copyright © 2011-2022 走看看