Rest之路 - 第一个Rest程序

在 Eclipse 里新建一个 Dynamic project 

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

 

Add jars to "build path"

 

 

根据业务层次编写程序

 

User

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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 路径

 

posted @   TonyZhang24  阅读(343)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示