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 路径
分类:
Java Web
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现