restful请求风格的增删改查-----查询and添加

news2024/12/25 18:04:53

一、restful风格的介绍

restful也称之为REST ( Representational State Transfer ),可以将它理解为一种软件架构风格或设计风格,而不是一个标准。简单来说,restful风格就是把请求参数变成请求路径的一种风格。例如,传统的URL请求格式为:

http://localhost:8080/chapter14restful/adduser.jsp?id=1

采用restful请求格式后,变为

http://localhost:8080/chapter14restful/adduser.jsp/1

restful风格在HTTP请求中,使用put、delete、 post 和get方式分别对应添加、删除、修改和查询的操作。不过目前国内开发,还是只使用post和get方式来进行增删改查操作。
 

二、准备工作:

使用软件:eclipse。

正确创建实体类,并创建set、get、tostring、有/无参构造方法。

了解restful风格在HTTP请求中,使用的put,delete,post,get方式对应增删改查。这一点在前后端相连时,很重要。你请求的Ajax方式对应后端@RequestMapping的方式。

三、查询:

前端:

<%@ page language="java" contentType="text/html;charset=UTF-8"
    pageEncoding="UTF-8"%>
<! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>restful测试</title>
<meta http-equiv="Content-Type"  content="text/html; charset=UTF-8">
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/bootstrap-4.6.2-dist/css/bootstrap.min.css">
<script src="${pageContext.request.contextPath }/js/jquery-3.5.1/jquery-3.5.1.min.js"></script>
<script src="${pageContext.request.contextPath }/js/bootstrap-4.6.2-dist/js/bootstrap.bundle.min.js"></script>

<script type="text/javascript">
	function search(){
		//获取输入的用户名和密码
		var id = $("#number").val();
		$.ajax({
			url:"${pageContext.request.contextPath }/user/"+id,
			type:"GET",
			//定义相应的数据格式为Json
			dataType:"json",
			//成功响应结果
			success: function(data){
				 if(data.username!=null){
					 alert("您查询的用户名为:"+data.username);
				 }else{
					 alert("没有找到id为"+id+"的用户")
				 }
			}
		});
		
	}
</script>

</head>
<body>
   <form >
      	编号:<input type="text" name="number" id="number"><br>
        <input type="button" value="查询" class="btn btn-success" onclick="search()"><br>
   </form>
</body>
</html>

后端:

   /*
	*接受Restful风格的请求,其接受方式为get----查询操作
	*/
	@GetMapping(value="/user/{id}")
	@ResponseBody
	public User selectUser(@PathVariable("id") String id) {
		//查看数据接收
		System.out.println("您查询到了id="+id);
		User user = new User();
		//模拟根据id查询到用户对象
		if("1234".equals(id)) {
			user.setUsername("Tom");
		}
		return user;		
	}

前端结果显示:

四、添加:

我的妈,卡了好久,结果超级简单的逻辑,前端获取到的信息我们用一个对象来存,这样我们传给后端时,直接传递这个对象就行,后端接受对象需要用到注解@RequestBody 。

同时要注意@RequestParam 注解来接收参数。这意味着 'id' 参数应该作为 URL 查询参数发送,而不是请求主体中的 JSON 数据。请确保请求的 URL 中包含了合适的查询参数,例如 http://localhost/user?id=123,其中 '123' 是有效的整数值。我采取的是通过请求主体以 JSON 格式发送参数,那么前端代码和后端代码都需要JSON 格式。

前端:

<%@ page language="java" contentType="text/html;charset=UTF-8"
    pageEncoding="UTF-8"%>
<! DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type"  content="text/html; charset=UTF-8">
<link rel="stylesheet" href="${pageContext.request.contextPath }/js/bootstrap-4.6.2-dist/css/bootstrap.min.css">
<script src="${pageContext.request.contextPath }/js/jquery-3.5.1/jquery-3.5.1.min.js"></script>
<script src="${pageContext.request.contextPath }/js/bootstrap-4.6.2-dist/js/bootstrap.bundle.min.js"></script>
<title>添加用户页面</title>
<style>
.container {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}
</style>

<script type="text/javascript">
function add(){
    //添加对象
    var user = {
            id:parseInt($("#id").val()),
            username:$("#username").val(),
            password:$("#password").val()
    };
    //能正确获取输入框里的元素
    alert("id: " + user.id + ", username: " + user.username + ", password: " + user.password);
    
    $.ajax({
        url:"${pageContext.request.contextPath }/user",
        type:"put",
        //data表示发送的数据,将三个参数绑定到一起
        data:JSON.stringify({ id: user.id, username: user.username, password: user.password }),
        //定义发送请求的数据格式为JSON字符串
        contentType:"application/json;charset=UTF-8",
        //成功响应结果
        success: function(data){
            if(data!=null){
                alert("您成功添加了编号为"+user.id+"的用户")
            }else{
                alert("添加出错了")
            }
        }
    });
}
</script>

</head>
<body>
    <div class="container">
      <form class="form">
              编&nbsp;&nbsp;&nbsp; 号:<input type="text" name="id" id="id"><br>
          用户名:<input type="text" name="username" id="username"><br>
          密&nbsp;&nbsp;&nbsp; 码:<input type="password" name="password" id="password"><br>
        <input type="button" value="添加" class="btn btn-primary" onclick="add()"><br>
      </form>
    </div>
   
</body>
</html>

后端:

    /*
    * 接受Restful风格的请求,其接受方式为put----添加操作
    */
    @PutMapping(value="/user")
    @ResponseBody
    public User addUser(@RequestBody User user) 
    {
        Integer id = user.getId();
        String username = user.getUsername();
        String password = user.getPassword();
        //查看数据接收
        System.out.println("成功添加了id="+id+",username="+username+",password"+password+"的用户");
        //创建新用户
        
        return user;        
    }

前端结果显示:

  控制台信息:

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

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

相关文章

SpringBoot---------Lombook

Lombok是一个可以通过简单的注解形式来帮助我们简化消除一些必须有但显得很臃肿的Java代码的工具&#xff0c;通过使用对应的注解&#xff0c;可以在编译源码的时候生成对应的方法&#xff0c;也就是简化咱们之前pojo&#xff0c;实体类里面臃肿的get/set有参无参。 首先查看一…

【Linux】认识文件(二):重定向

【Linux】认识文件&#xff08;二&#xff09;&#xff1a;重定向 一.stdout,stderr,stdin二.重定向1.什么是重定向i.输出重定向>ii.追加重定向>>iii.输入重定向< 2.重定向原理3.dup2的使用 三.理解linux中的一切皆文件 上篇文件博客中&#xff0c;讲了进程管理已打…

助企扩岗稳就业,2024年成都市重点企业稳就业政策培训会圆满举行!

2024年4月17日&#xff0c;由成都市就业服务管理局主办&#xff0c;成都市金牛区就业服务管理局承办的2024年成都市重点企业稳就业政策培训会&#xff08;金牛区专场&#xff09;在成都市金牛区顺利举行。此次培训会由国际数字影像产业园召集全区70余家重点企业积极参与&#x…

Android Studio实现内容丰富的安卓养老平台

获取源码请点击文章末尾QQ名片联系&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动 158安卓养老 1.开发环境 后端用springboot框架&#xff0c;安卓的用android studio开发android stuido3.6 jak1.8 idea mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登…

ELK 日志分析(二)

一、ELK Kibana 部署 1.1 安装Kibana软件包 #上传软件包 kibana-5.5.1-x86_64.rpm 到/opt目录 cd /opt rpm -ivh kibana-5.5.1-x86_64.rpm 1.2 设置 Kibana 的主配置文件 vim /etc/kibana/kibana.yml --2--取消注释&#xff0c;Kiabana 服务的默认监听端口为5601 server.po…

C++11——线程库的理解与使用

目录 前言 一、线程库的构造 1.默认构造 2.带参构造 3.拷贝构造与赋值拷贝&#xff08;不支持&#xff09; 4.移动构造 二、线程调用lambda函数 三、线程安全与锁 1.lambda中的线程与锁 2.函数指针中的线程与锁 3.trylock() 4.recursive_mutex 5.lock_gurad守卫锁…

android开发 多进程的基本了解

目录 如何开启多进程?理解多进程模式的运行机制 如何开启多进程? 给四大组件在androidMenifest中指定android:precess <activityandroid:name".ThreeActivity"android:exported"false"android:process"com.my.process.three.remote" />…

4月21日Linux运维用户相关的添加,分组,修改权限等shell脚本开发第一天

4月21日运维用户相关的添加&#xff0c;分组&#xff0c;修改权限等shell脚本开发第一天 第一天主要实现前2个功能 ​ 主要卡在了&#xff1a; 正确的写法如下&#xff0c;注意[]中的空格&#xff0c;要求很严格&#xff01;&#xff01;&#xff01; #!/bin/bash # 先查看已…

Unity射击游戏开发教程:(3)如何销毁游戏对象 ,添加CD

在 Unity 中销毁游戏对象 在我之前的文章中,我写了关于实例化或创建激光预制体,当发射时,激光预制件将继续在屏幕上移动一段时间。 创建所有这些激光预制件后,最终会减慢游戏速度,因此我们必须通过创建激光预制件来找到平衡,在屏幕上移动直到它超出游戏视图,然后销毁它…

Vue2:标签页一个页面拆分成俩个选项卡

概要 在自己的项目中&#xff0c;标签页组件显示一般就是点击一个页面&#xff0c;然后标签页组件显示该页面的名称。但是如果你是一个页面文件中展示不同的内容比如( 某模块的新增页面 和 详情页面)一般内容新建页面和详情页面差别不是很大&#xff0c;有的内容甚至俩边都会用…

windows驱动开发-设备栈

设备栈是windows内核中非常重要的部分&#xff0c;这部分理解可以让我们在调试中节省大量的时间&#xff0c; 在windows NT体系中&#xff0c;内核所有的设备被按照连接次序加载到设备树上&#xff0c;这棵树的根节点是ROOT节点&#xff0c;每一个设备可以从当前路径一直遍历到…

查询服务器上所有SQL SERVER数据库中是否包含某个字段,且该字段是否包含某个值

公司有一堆相同类别的客户&#xff0c;每个客户都部署了相同的一套系统&#xff0c;每套系统对应一个相同结构的数据库&#xff0c;昨天老板让查一下手机号码177xxxxx248是属于哪个客户的客户。 我要查的这个号码来自于oa_member表中的phone字段&#xff0c;我需要对所有的数据…

Android 性能优化之黑科技开道(二)

3. 其它可以黑科技优化的方向 3.1 核心线程绑定大核 3.1.1 定义 核心线程绑定大核的思路也很容易理解&#xff0c;现在的 CPU 都是多核的&#xff0c;大核的频率比小核要高不少&#xff0c;如果我们的核心线程固定运行在大核上&#xff0c;那么应用性能自然会有所提升。 核…

使用Python比较两张人脸图像并获得准确度

使用 Python、OpenCV 和人脸识别模块比较两张图像并获得这些图像之间的准确度水平。 一、原理 使用Face Recognition python 模块来获取两张图像的128 个面部编码&#xff0c;并比较这些编码。比较结果返回 True 或 False。如果结果为True &#xff0c;那么两个图像将是相同的…

社交媒体内容创新:Kompas.ai如何引领潮流

在数字营销的激烈竞争中&#xff0c;社交媒体平台已成为品牌与消费者互动的主要战场。随着用户对新鲜、有趣和互动性强的内容需求不断增长&#xff0c;品牌必须不断创新&#xff0c;以维持其在社交媒体上的影响力和吸引力。本文将深入探讨社交媒体平台上内容创新的必要性及其对…

【Python】使用Python计算简单数值积分

题外话&#xff0c;Python语言命名的来源&#xff1a;&#xff08;见下图&#xff09;Monty Python巨蟒剧团 1、积分题目&#xff08;3&#xff09; 2、解析解答 3、Python计算代码 import math import scipy.integrate as integrate# 积分区间 # x_min 0.0 # 1 # x_min …

【C语言】操作符相关编程题

目录 题目一&#xff1a; 题目二&#xff1a; 题目三&#xff1a; 题目三&#xff1a; 题目四&#xff1a; 题目五&#xff1a; 题目六&#xff1a; 题目七&#xff1a; 题目八&#xff1a; 题目一&#xff1a; 题目&#xff1a;不创建临时变量&#xff0c;交换两个数…

第一届 _帕鲁杯_ - CTF挑战赛

Mis 签到 题目附件&#xff1a; 27880 30693 25915 21892 38450 23454 39564 23460 21457 36865 112 108 98 99 116 102 33719 21462 21069 27573 102 108 97 103 20851 27880 79 110 101 45 70 111 120 23433 20840 22242 38431 22238 22797 112 108 98 99 116 102 33719 2…

Spring Boot集成zipkin快速入门Demo

1.什么zipkin Zipkin是一款开源的分布式实时数据追踪系统&#xff08;Distributed Tracking System&#xff09;&#xff0c;基于 Google Dapper的论文设计而来&#xff0c;由 Twitter 公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据。Zipkin默认支持Http协议&…

提取出图像的感兴趣区域

这是我们的原图像 将图像的数值统计后进行条形图展示 import matplotlib.pyplot as plt from PIL import Image import numpy as np# 图像路径 image_path r"D:\My Data\Figure\OIP.jpg"# 打开图像 image Image.open(image_path)# 将图像转换为numpy数组 image_ar…