假期别闲着:REST API实战演练之创建Rest API

news2024/11/27 12:40:48

1、创建实体类,模拟实体对象

创建一个类,模拟数据数据库来存储数据,这个类就叫Person。

其代码如下:

package com.restful;

public class Person {
	private String name;
	private String about;
	private int birthYear;
	
	public Person(String name, String about, int birthYear) {
		this.name = name;
		this.about = about;
		this.birthYear = birthYear;
	}
 
	public String getName() {
		return name;
	}
 
	public String getAbout() {
		return about;
	}
 
	public int getBirthYear() {
		return birthYear;
	}
}

2、创建数据类,模型数据库存储

再创建一个类,假设能够访问我们的数据库,类名字就叫DataStore。

编写如下代码:

package com.restful;

import java.util.HashMap;
import java.util.Map;

public class DataStore {
	//Map of names to Person instances.
	private Map<String, Person> personMap = new HashMap<>();
	
	//this class is a singleton and should not be instantiated directly!
	private static DataStore instance = new DataStore();
	public static DataStore getInstance(){
		return instance;
	}
 
	//private constructor so people know to use the getInstance() function instead
	private DataStore(){
		//dummy data
		personMap.put("Ada", new Person("Ada", "Ada Lovelace was the first programmer.", 1815));
		personMap.put("Kevin", new Person("Kevin", "Kevin is the author of HappyCoding.io.", 1986));
		personMap.put("Stanley", new Person("Stanley", "Stanley is Kevin's cat.", 2007));
	}
 
	public Person getPerson(String name) {
		return personMap.get(name);
	}
 
	public void putPerson(Person person) {
		personMap.put(person.getName(), person);
	}
}

3、创建Servlet,接收请求并访问数据对象

接下来,我们创建一个Servlet类,类名就叫做PersonServlet。

修改代码如下:

package com.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;

import com.restful.DataStore;
import com.restful.Person;
/**
 * Servlet implementation class PersonServlet
 */
@WebServlet("/PersonServlet")
public class PersonServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public PersonServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub

		String requestUrl = request.getRequestURI();
		String name = requestUrl.substring(requestUrl.lastIndexOf("/")+1);
		System.out.println(name);
		Person person = DataStore.getInstance().getPerson(name);
		if(person != null){
			String json = "{\n";
			json += "\"name\": " +"\""+ person.getName() +"\""+ ",\n";
			json += "\"about\": " + "\""+ person.getAbout() + "\""+",\n";
			json += "\"birthYear\": " + "\""+ person.getBirthYear() + "\""+"\n";
			json += "}";
			response.getOutputStream().println(json);
		}
		else{
			//That person wasn't found, so return an empty JSON object. We could also return an error.
			response.getOutputStream().println("{}");
		}
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		String name = request.getParameter("name");
		String about = request.getParameter("about");
		int birthYear = Integer.parseInt(request.getParameter("birthYear"));
		
		DataStore.getInstance().putPerson(new Person(name, about, birthYear));

	}

}

上述创建的Servlet类包含了doGet函数和doPost函数。

4、配置一个Servlet映射

创建servlet后,我们修改一下我们的web.xml,做一个映射,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0">
  <display-name>HelloJSP</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>default.htm</welcome-file>
  </welcome-file-list>
  
  	<servlet>
		<servlet-name>PersonServlet</servlet-name>
		<servlet-class>com.servlet.PersonServlet</servlet-class>
	</servlet>
 
	<servlet-mapping>
		<servlet-name>PersonServlet</servlet-name>
		<url-pattern>/people/*</url-pattern>
	</servlet-mapping>

</web-app>

doGet()函数从 URL 中获取一个人的姓名,然后使用DataStore类来获取那个人。接着它从该人的数据中创建一个 JSON 字符串,并将该 JSON 作为对请求的响应返回GET。请记住,JSON 使用用引号括起来的键和值,如下所示:

{
"name": "Ada",
"about": "Ada Lovelace was the first programmer.",
"birthYear": 1815
}

5、测试

接下来我们启动服务加载该servlet,在浏览器输入如下地址:localhost:8080/HelloJSP/people/Kevin

结果显示如下:

今天就先把怎么写一个简单的rest api介绍到这儿,后面说一下客户端怎么使用rest api访问数据。

参考资料:https://blog.csdn.net/allway2/article/details/123375541

https://happycoding.io/tutorials/java-server/rest-api

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1582194.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++(六个默认成员函数)

目录 六个默认成员函数构造函数析构函数拷贝构造函数 总结 六个默认成员函数 默认成员函数的概念&#xff1a;如果用户不显式写&#xff0c;编译器会自动生成的函数&#xff0c;就是默认成员函数 构造函数 构造函数是六个默认成员函数之一&#xff0c;构造函数的功能类似于init…

血常规、尿检等指标就能识别卵巢癌!中山大学刘继红团队牵头,四大医学院联合构建 AI 融合模型

根据国家卫生健康委员会发布的《卵巢癌诊疗指南&#xff08;2022 版&#xff09;》&#xff0c;我国卵巢癌年发病率居女性生殖系统肿瘤第 3 位&#xff0c;仅次于子宫颈癌和子宫体恶性肿瘤&#xff0c;病死率位于女性生殖道恶性肿瘤之首&#xff0c;其 5 年生存率与诊断时的病程…

VM-UNet: Vision Mamba UNet for Medical Image Segmentation

VM-UNet: Vision Mamba UNet for Medical Image Segmentation VM-UNet&#xff1a;基于视觉Mamba UNet架构的医学图像分割 论文链接&#xff1a;http://arxiv.org/abs/2402.02491 代码链接&#xff1a;https://github.com/JCruan519/VM-UNet 1、摘要 文中利用状态空间模型SS…

Vue2 —— 学习(四)

一、收集表单数据 &#xff08;一&#xff09;介绍 前面其实已经 学过了 v-model 双向绑定事件&#xff0c;能获取到表单中的内容到 vm 实例对象中 但是前面只是收集文本框&#xff0c;下面学习一下 各种类型表单数据收集 &#xff08;单/多 选&#xff0c;下拉框&#xff0…

Java - 赋值运算符

在这个实战中&#xff0c;我们将学习赋值运算符的使用方法。首先&#xff0c;我们将介绍简单赋值运算符的基本概念和语法格式。然后&#xff0c;我们将通过案例演示来加深对赋值运算符的理解。接下来&#xff0c;我们将对比Java和Python这两种不同的编程语言&#xff0c;探讨它…

linux进阶篇:文件查找的利器——grep命令+管道操作详解

Linux文件查找的利器——grep命令管道操作详解 1 grep简介 grep (global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具&#xff0c;它能使用正则表达式搜索文本&#xff0c;并把匹配的行打印出来。 Uni…

4.2.4 理解路由器数据包过程

1、实验目的 通过本实验可以掌握&#xff1a; 了解IP路由原理了解数据包封装和解封装的概念了解路由器路由和交换过程 2、实验拓扑 观察路由器路由数据包过程的实验拓扑如图4-3所示&#xff0c;设备接口地址信息如表4-2所示。 图4-3 观察路由器路由数据包过程的实验拓扑 本…

常见深度学习之十二大激活函数【函数定义、性质、数学公式、代码实现】

目录 前言 1、激活函数的定义与作用 2、激活函数的性质 二、常见的激活函数 2.1 Sigmoid函数&#xff1a; 1. 作用 2. 优点 3. 缺点 4. 数学公式 5.Sigmoid函数实现及可视化图像 2.2 Tanh函数 1. 函数定义 2.优点 3.缺点 4.Tanh函数实现及可视化图像 2.3ReLU 函数 &#xff1a;…

盘点那些好用的FIORI App(六)-导出金税批量开票文件

着全电发票政策的推行&#xff0c;越来越多的企业由原来的纸质专票以及电子票转向了全电发票&#xff0c;全电发票与原来票的区别在于&#xff0c;企业不再需要金税盘&#xff0c;可以直接登录电子开票平台&#xff0c;开具电子发票。税务平台提供了一个可以批量上传发票进行开…

SpringBoot学习笔记三-原理分析

SpringBoot学习笔记三-原理分析 SpringBoot自动装配1.1 案例1.2 通过注解方式管理Bean1.3 小结1.4 Enable注解1.5 Import注解1.5.1 ImportSelector实现类1.5.2 导入ImportBeanDefinitionRegistrar 1.5 EnableAutoConfiguration1.6 案例 SpringBoot自动装配 当再pom.xml中导入对…

数据结构|排序总结(1)|直接插入排序

排序分类 插入排序&#xff1a;直接插入排序&#xff0c;希尔排序 选择排序&#xff1a;选择排序&#xff0c;堆排序 交换排序&#xff1a;冒泡排序&#xff0c;快速排序 归并排序 插入排序 直接插入排序 相当于摸牌&#xff0c;例如我们现在手上有{2&#xff0c;4&#xff0…

无法解析符号 ‘mybatis‘(类似这种报错)

问题&#xff1a;无法解析符号 mybatis&#xff08;类似这种报错&#xff09; 解决&#xff1a;

安科瑞用户侧35kV用户变电站系统结构【110kV/66kV/35kV】

35kV综自系统项目怎么做&#xff1f;客户群体是什么&#xff1f;能带来多大的业绩&#xff1f; 1&#xff09;主要客户群体是设计院&#xff08;电力设计院、行业设计院&#xff09;、甲方、总包。 2&#xff09;综自系统本身的体量和业绩&#xff1a; a.大约35kV&#xff08…

螺旋矩阵.

0螺旋矩阵 - 蓝桥云课 (lanqiao.cn) 题目描述 对于一个n行m列的表格&#xff0c;我们可以使用螺旋的方式给表格依次填上正整数&#xff0c;我们称填好的表格为一个螺旋矩阵。 例如&#xff0c;一个4行5列的螺旋矩阵如下&#xff1a; 1 2 3 4 5 14 15 16 17 6 13 20 19 18 7 12 …

微服务(狂神)

什么是微服务&#xff1a; 微服务方案&#xff1a; 1. SpringCloud NetFlix 2. Dubbo 3. SpringCloud Alibaba 解决了什么问题&#xff1a; 1. 服务过多&#xff0c;客户端怎么访问 2. 服务过多&#xff0c;服务间怎么传值 3. 服务过多&#xff0c;如何治理 4. 服务过多…

【HTML】简单制作一个分形动画

目录 前言 开始 HTML部分 效果图 ​编辑​编辑​编辑​编辑总结 前言 无需多言&#xff0c;本文将详细介绍一段代码&#xff0c;具体内容如下&#xff1a; 开始 首先新建文件夹&#xff0c;创建一个文本文档&#xff0c;其中HTML的文件名改为[index.html]&a…

Python中csr_matrix的两种初始化方法

本文以csr_matrix为例来说明sparse矩阵的使用方法&#xff0c;其他类型的sparse矩阵可以参考https://docs.scipy.org/doc/scipy/reference/sparse.html csr_matrix是Compressed Sparse Row matrix的缩写组合&#xff0c;下面介绍其两种初始化方法 csr_matrix((data, (row_ind…

京东云16核64G云服务器租用优惠价格500元1个月、5168元一年,35M带宽

京东云16核64G云服务器租用优惠价格500元1个月、5168元一年&#xff0c;35M带宽&#xff0c;配置为&#xff1a;16C64G-450G SSD系统盘-35M带宽-8000G月流量 华北-北京&#xff0c;京东云活动页面 yunfuwuqiba.com/go/jd 活动链接打开如下图&#xff1a; 京东云16核64G云服务器…

Python-VBA函数之旅-bool函数

目录 1、bool函数 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、相关文章&#xff1a; 个人主页&#xff1a;非风V非雨-CSDN博客 bool函数(Boolean Function)用于将给定的值转换为布尔值(True或False)。常见的应用场景有&#xff1a; 1、条件判断&#xff1a;bool()…

vulhub之ActiveMQ篇

ActiveMQ的web控制台分三个应用&#xff0c;admin、api和fileserver&#xff0c;其中admin是管理员页面&#xff0c;api是接口&#xff0c;fileserver是储存文件的接口&#xff1b;admin和api都需要登录后才能使用&#xff0c;fileserver无需登录。fileserver是一个RESTful API…