SpringBoot结合restful实现发送PUT、DELETE、GET、POST请求

Springboot中Restful风格的POST、GET、PUT、DELETE请求实例 如果你不知道什么是Restful,请看一位大佬的博客:restful风格详细介绍 Restful风格请求实例 实验功能 请求URL 请求方式 查询所有 /persons GET 查询某个 (来到修改页面) /person/1 GET 来到添加页面 /person GET 添加 /person POST 来到修改页面 /person/1 GET 修改 /person PUT 删除 /person/1 DELETE 需要注意 1.在application.prope 阅读详情

1、Restful风格

Web开发的过程中,method常用的值是get和post,可事实上,method值还可以是put和delete等等其他值。
restful风格:
URL就都使用一样的 “/categories”,区别只是在于method不同,服务器根据method的不同来判断浏览器期望做的业务行为

2、创建Maven Web项目

文档结构图如下
在这里插入图片描述

3、导入jar包

<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.9.RELEASE</version>
	</parent>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>

		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
		<!-- servlet依赖. -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>

		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
		</dependency>
		<!-- tomcat的支持. -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>

		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional> <!-- 这个需要为 true 热部署才有效 -->
		</dependency>

		<!-- mysql -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
		</dependency>

		<!-- jpa -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-data-jpa</artifactId>
		</dependency>
		<!-- springboot test -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<properties>
		<java.version>1.8</java.version>
	</properties>

4、增加application.properties

在src/main/resources 目录下增加 application.properties文件

#视图解析器的配置
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
#数据库的相关配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/springboot?characterEncoding=UTF-8
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
#表示自动更新表结构
spring.jpa.properties.hibernate.hbm2ddl.auto=update

5、创建Pojo

package com.how2java.springboot.pojo;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity //表示是一个实体类
@Table(name="category_") //对应数据库中的表名
public class Category {
	@Id //主键
	@Column(name="id") //数据库中的列名
	@GeneratedValue(strategy=GenerationType.IDENTITY) //主键生成策略,自动增长
	private int id;
	@Column(name="name")
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

6、DAO层,数据库访问层使用JPA

package com.how2java.springboot.dao;

import java.io.Serializable;

import org.springframework.data.jpa.repository.JpaRepository;

import com.how2java.springboot.pojo.Category;

public interface CategoryDAO extends JpaRepository<Category,Serializable> {

}

7、添加SpringBoot启动类

package com.how2java.springboot;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class Start {
	public static void main(String[] args) {
		SpringApplication.run(Start.class, args);
	}
}

8、编写Controller层

package com.how2java.springboot.Controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestParam;

import com.how2java.springboot.dao.CategoryDAO;
import com.how2java.springboot.pojo.Category;

/**
 * @author 86182
 * @verion:1.0
 * @description:
 */
@Controller
public class CategoryController {
	@Autowired
	CategoryDAO dao;
	@GetMapping("/categories")
	//1. 在参数里接受当前是第几页 start ,以及每页显示多少条数据 size。 默认值分别是0和5。
	public String listCategory(Model m,@RequestParam(value="start",defaultValue="0")int start,
			@RequestParam(value="size",defaultValue="5")int size){
		// 如果 start 为负,那么修改为0. 这个事情会发生在当前是首页,并点击了上一页的时候
		start=start<0?0:start;
		//spring data JPA 按照id降序
		Sort sort=new Sort(Sort.Direction.DESC,"id");
		// 根据start,size和sort创建分页对象
		Pageable pageable=new PageRequest(start, size, sort);
		/**
		*根据这个分页对象获取结果page
		*在这个page对象里,不仅包含了分页信息,还包含了数据信息,即有哪些分类数据。
		* 这个可以通过getContent()获取出来
		*/
		Page<Category>page=dao.findAll(pageable);
		m.addAttribute("page",page);
		return "listCategory";
	}
	/**
	 * post提交请求
	 * @param c
	 * @return
	 */
	@PostMapping("/categories")
	public String addCategory(Category c){
		dao.save(c);
		return "redirect:/categories";
	}
	/**
	 * delete请求
	 * @param c
	 * @return
	 */
	@DeleteMapping("/categories/{id}")
	public String delete(Category c){
		dao.delete(c);
		return "redirect:/categories";
	}
	/**
	 * get请求
	 * @param m
	 * @param id
	 * @return
	 * @PathVariable 要绑定到的路径变量的名称

	 */
	@GetMapping("/categories/{id}")
	public String editCategory(Model m,@PathVariable(name="id")int id){
		Category c=dao.getOne(id);
		m.addAttribute("c",c);
		return "editCategory";
	}
	/**
	 * update请求
	 * @param c
	 * @return
	 */
	@PutMapping("/categories/{id}")
	public String updateCategory(Category c){
	//JPA 新增和修改用的都是save. 它根据实体类的id是否为0来判断是进行增加还是修改
		dao.save(c);
		return "redirect:/categories"; //重定向到列表
	}
	
}

9、 列表页面

<%@ page contentType="text/html; charset=utf-8" 
pageEncoding="utf-8" isELIgnored="false"%>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>产品列表页面</title>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script>
	$(function(){
		$(".delete").click(function(){
			var href=$(this).attr("href");
			//url修改为categories/id
			//点击超链后,会使用form提交,并且提交_method的值为delete,以达到和增加类似的效果
			$('#formdelete').attr('action',href).submit();
			return false;
		});
	});
</script>
<style>
	td{
		padding:10px;
	}
	div,form{
		width:230px;
		margin:auto;
	}
</style>
</head>
<body>
<table align="center" border="1" cellspacing="0">
	<tr>
		<td>id</td>
		<td>name</td>
		<td>编辑</td>
		<td>删除</td>
	</tr>
	<!--page.getContent遍历当前页面的Category对象。-->
	<c:forEach items="${page.content }" var="c">
		<tr>
			<td>${c.id }</td>
			<td>${c.name }</td>
			<td>
				<a href="categories/${c.id }">编辑</a>
			</td>
			<td>
				<a href="categories/${c.id }" class="delete">删除</a>
			</td>
		</tr>
	</c:forEach>
</table>
<br>
<div>
	<a href="?start=0">首页</a>
	<!--  在分页的时候通过page.number获取当前页面-->
	<a href="?start=${page.number-1 }">上一页</a>
	<a href="?start=${page.number+1 }">下一页</a>
	<!--page.totalPages获取总页面数  -->
	<a href="?start=${page.totalPages-1 }">末页</a>
</div>
<form action="categories" method="post">
		<input name="name">
		<input type="submit" value="提交">
</form>
<form action="" method="post" id="formdelete">
	<!-- 需要在页面上添加隐藏域告诉controller此请求是哪种请求方式: -->
	<input type="hidden" value="DELETE" name="_method">
</form>
</body>
</html>

10、列表编辑页面

需要使用的是Restful风格,但是浏览器使用form提交信息的时候只支持GET和POST。
因为SpringBoot是SpringBoot自动配置好HiddenHttpMethodFilter 的,不需要像SpringMvc一样配置。
form标签下添加以下input标签即可,value值就是指定的请求方式
form 下增加 filed, 虽然这个form的method是post, 但是springmvc看到这个_method的值是put后,
会把其修改为put.

<input type="hidden" name="_method" value="PUT">
<%@ page contentType="text/html; charset=utf-8" 
pageEncoding="utf-8" isELIgnored="false"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>产品编辑页面</title>
</head>
<body>
	<form action="/categories/${c.id}" method="post">
		<input name="_method" value="PUT" type="hidden">
		<input name="name" value="${c.name }">
		<input type="submit" value="提交">
	</form>
</body>
</html>
SpringBoot使用PUT、DELETE、PATCH请求方式 在使用RestFul风格开发时,通过 URL 定位资源,通过HTTP请求方式表示对资源的处理方式,对应方式如下表所示。 GET 查询 POST 增加 PUT 更新 PATCH 更新(通常是部分修改) DELETE 删除 但是,前端中表单只能发送GET、POST两种请求方式,无法发送其他三种请求。因此,必须要在后端对请求方式进行处理,转换成其他三种请求。 SpringMVC底层中提供了 hiddenHttpMethodFilter 过滤器,可以拦截HTTP请求,将POST请求转 阅读详情

相关推荐

【SpringBoot的坑】Restful请求报错Request method 'POST' not supported,HiddenHttpMethodFilter无法将POST转换为PUT原因分析

直接上结论: 因为 SpringBoot 版本原因,在我目前使用的 2.2.4 版本中,需要在springapplication.xml文件中 添加配置: spring.mvc.hiddenmethod.filter.enabled = true 什么是 REST Restful 目的只是让 url 看起来更简洁实用,是资源状态的一种表达。 Restful 的使用 由于 H5 的 form...

寒泉 7万+

Restful的GET、POST、PUT、DELETED、PATCH几种操作

HTTP Method 与 CURD 数据处理操作对应HTTP方法数据处理说明POSTCreate新增一个没有id的资源GETRead取得一个资源PUTUpdate更新一个资源。或新增一个含 id 资源(如果 id 不存在)DELETEDelete删除一个资源PATCH是POST的补充,用来对已知资源进行局部更新 restful通过RestTemplate 对象来调用远程服务@Autowiredp...

jiushancunMonkeyKing的博客 2732

SpringBoot构建Restful service完成Get和Post请求

主要介绍了SpringBoot构建Restful service完成Get和Post请求的示例代码,感兴趣的朋友一起看看吧

java put请求实例,RESTful风格 GET、POST、PUT、DELETE前端请求示例

GET请求后端:@ResponseBody@GetMapping("/user/{id}")public User selectUserById(@PathVariable("id") Integer id){return userService.getUserById(id);}前端:localhost:8083/user/1POST请求后端:@ResponseBody@PostMapping(...

weixin_42499441的博客 1149

Ansys Fluent DPM模型实战:旋风分离器颗粒轨迹仿真全流程解析(附案例文件)

本文详细解析了使用Ansys Fluent中的离散相模型进行旋风分离器颗粒轨迹仿真的全流程。从几何简化、网格策略到物理模型界定,重点阐述了DPM模型的关键设置步骤,包括单向耦合假设、颗粒注入与受力配置,并提供了结果分析与优化方法,帮助工程师精准模拟气固分离过程,提升设计效率。

sunny的博客 700

AI 帮我写单测:pytest 覆盖率提升 40% 的协作日志

AI助力pytest测试覆盖率提升40%的实践总结 本文分享了作者通过AI协作提升Python项目测试覆盖率的实践经验。初始测试覆盖率仅45%的电商后端项目,通过系统化的AI协作策略(代码分析、场景矩阵设计、迭代优化)实现了显著改进。AI不仅生成312个高质量测试用例,更提供了测试设计思路和最佳实践建议。最终覆盖率提升至85%,发现并修复23个潜在bug,效率提升3倍。文章详细展示了用户服务、订单服务等核心模块的测试案例,以及分层Fixture设计、参数化测试等高级技巧。关键成功因素包括明确的协作边界、迭代

摘星编程的博客 3272

springmvc--day1

SpringMVC入门 因为SpringMVC是一个Web框架,将来是要替换Servlet,所以先来回顾下以前Servlet是如何进行开发的? 1.创建web工程(Maven结构) 2.设置tomcat服务器,加载web工程(tomcat插件) 3.导入坐标(Servlet) 4.定义处理请求的功能类(UserServlet) 5.设置请求映射(配置映射关系) SpringMVC的制作过程和上述流程几乎是一致的,具体的实现流程是什么? 1.创建web工程(Maven结构) 2.设置tomc

m0_63703905的博客 317

告别黑盒调试:用MMSegmentation可视化工具链,从训练到评估一目了然

本文介绍了如何利用MMSegmentation的可视化工具链,从训练到评估实现语义分割模型的透明化调试。通过整合日志分析、混淆矩阵、PR曲线等工具,开发者可以快速定位模型问题,优化性能。文章详细展示了训练曲线分析、性能剖析、混淆矩阵解读和PR曲线应用等关键步骤,帮助用户告别黑盒调试,提升模型开发效率。

weixin_29100927的博客 102

SpringBoot——RESTful风格以及如何快速发送不同方式的请求

SpringBoot——RUST风格以及如何快速发送不同方式的请求

hssjsh的博客 1560

在abaqus中利用point-based 来快捷定义螺栓连接

abaqus中可以通过point-based方式定义连接点的位置,并对连接方式进行定义,可以进行螺栓连接的模拟。 可以通过逐点输入坐标或导入外部的坐标位置 也可以通过阵列的方式定义点 定义完点后就利用create fasteners,选择point-based,选取刚才创建好的点阵列,然后定义连接的属性,如下图 定义connector section时,类型选择translator,相当于只有1方向可以动,定义弹性模量以及破坏准则。 案例操作 假如有两个板,通过...

fiber_tape的博客 7335

树莓派IgH EtherCAT主站部署与实时内核调优实战

本文详细介绍了在树莓派上部署开源IgH EtherCAT主站并进行实时内核调优的完整实战流程。通过编译实时内核(RT-Preempt)、交叉编译IgH主站、系统集成配置及性能优化,实现了低成本、高定制的工业控制解决方案,有效满足了EtherCAT通信对微秒级实时性的严苛要求。

weixin_29166013的博客 299

SpringBoot——SpringBoot中使用RESTful风格

SpringBoot——SpringBoot中使用RESTful风格

贝尔摩德苦艾酒 1万+

SAP 管道业务(Pipeline Procurement)是用于水、电、气等不间断供应且无库存管理的物料采购场景,核心是消耗即记账、无库存持有,通过 MM-FI 集成实现实时负债与成本过账

摘要:SAP管道业务适用于水电气等无库存管理的物料采购场景,通过消耗即记账机制实现实时负债与成本过账。核心配置包括创建PIPE物料类型(无库存管理)、维护管道采购信息记录、配置自动记账科目等。SAP PO可集成外部系统实现流程自动化,如自动过账提取数据、发票校验等。实施要点在于物料主数据、信息记录和科目确定的精准配置,以及PO接口的可靠对接,最终构建端到端的高效采购与财务结算体系。

金牌架构师 748

Restful风格请求 后端接口参数接收详解

基于restful api接口规范,在SpringBoot项目中,前端HTTP请求中的参数如何映射到Controller层的接口方法中的参数?这里针对各种方式做一个测试与总结。

java全栈工程师 1万+

用Python爬取政府采购信息的实战全流程

以 Playwright 自动采集政府采购信息结构化存储与查询可拓展关键词过滤与通知机制。

2201_76125261的博客 1141

用MSBlock重塑C2f,让你的模型又轻又强(参数量与精度的双重突破)

打开确保模型解析器能识别MSBlock模块。通过将MSBlock集成到YOLOv8的C2f模块中,我们实现了一个“轻量且多尺度感知”的目标检测模型。这个改进不仅在工程上能降低部署成本、提升推理速度,更在科研上提供了“多尺度+动态核”的创新思路——这种思路可以延伸到其他网络(如ResNet、MobileNet)的改进中,帮你在论文中打造独特的研究点。如果你在实现过程中遇到问题,比如代码报错、训练收敛异常,可以先检查模块集成的每一步是否到位,再尝试调整MSBlock的卷积核尺寸、动态权重的计算方式等超参数。

m0_71589036的博客 105

SpringBoot Helloworld 入门,Postman 入门请求 GET、POST、PUT、DELETE

本文摘要: 本教程为Java初学者提供快速入门SpringBoot接口开发的完整指南。教程包含环境搭建、项目创建、接口编写和测试全流程,重点讲解四种HTTP请求方式(GET/POST/PUT/DELETE)的实现与测试方法。通过Spring Initializr快速初始化项目,使用Postman工具进行接口测试,帮助开发者在30分钟内掌握RESTful接口开发核心技能。教程特别适合希望高效学习SpringBoot并能独立开发Web接口的开发者,采用Maven项目管理,结合Lombok简化代码,实现从零到可运

2301_80099587的博客 879

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

springboot中get post put delete 请求

组合注解(RequestMapping的变形) @GetMapping = @RequestMapping(method = RequestMethod.GET) @PostMapping = @RequestMapping(method = RequestMethod.POST) @PutMapping = @RequestMapping(method = RequestMethod.PU...

xcc_2269861428的博客 2万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

SpringBoot2.X学习之HTTP接口,GET,POST,PUT,DELETE实战

在restful接口开发中常用到GET(读取),POST(新建),PUT(更新)以及DELETE(删除)四种HTTP方法,这里就对这四种方法在SpringBoot开发中的运用以及所用到的注解进行讲解 一.GET 首先我们先按照原先SpringMVC中GET方式获取数据方式的写法,在SpringBoot中也能用。下图中用下划线/{city_id}/{user_id},而不用驼峰传递参数的原因主要...

袖卷笛音的博客 1792

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

springboot发送PUT或DELETE请求

一、序章 根据项目需要使用的是Restful风格,但是浏览器使用form提交信息的时候只支持GET和POST。 二、实现 1、SpringBoot 因为SpringBoot是SpringBoot自动配置好HiddenHttpMethodFilter 的,不需要像SpringMvc一样配置。 直接在form标签下添加以下input标签即可,value值就是指定的请求方式。 <input typ...

userlhj的博客 1986

《SpringBoot入门实战:从HelloWorld到RESTful接口(支持GET/POST/PUT/DELETE,附Git版本控制)》

【30分钟快速上手SpringBoot接口开发】本教程面向Java初学者,通过SpringBoot实现RESTful接口开发全流程。内容涵盖:1)环境准备(JDK17+IDEA+Postman+Git);2)创建SpringBoot项目并开发GET/POST/PUT/DELETE接口;3)使用Postman测试接口;4)Git代码管理规范。重点演示了基于HashMap的内存数据增删改查操作,并提供了端口冲突、参数接收等常见问题的解决方案。通过本教程,开发者可快速掌握从项目创建到接口测试的完整开发流程,并学会

2301_80194233的博客 1075

SpringBoot的使用HiddenHttpMethodFilter组件无法将POST转换为PUT请求解决办法

SpringBoot的使用HiddenHttpMethodFilter组件无法将POST转换为PUT请求解决办法 解决办法 今天在学SpringBoot的时候遇到了由于starter版本不同造成的小坑: ​ 由于H5的form表单仅支持POST和GET两种请求,实现restfulAPI还需要PUT和DELETE,所以需要使用 HiddenHttpMethodFilter 组件在发送HTTP请求时对...

JR_swisher的博客 3178

Spring Boot 实战(10) 解决SpringBoot中 put 和 delete 提交不生效的问题

由于浏览器只能发送GET和POST请求,为了使得 PUT和 DELETE 提交生效,这篇文章给出了解决办法。

扬帆向海的博客 2万+

HttpClients调用restful接口get,post,put,delete接口工具类

随着spring boot越来越来流行,restful风格的接口也成为新的接口规范,spring MVC项目调用restful接口的工具类 import com.sun.xml.internal.fastinfoset.Encoder; import org.apache.http.client.methods.*; import org.apache.http.client.utils.URIB...

JavaEE技术进阶之路 950

Java中Http请求restful接口POST、GET、PUT、DELETE等

Java中Http请求restful接口POST、GET、PUT、DELETE等; springboot http请求controller接口;

ZHOU_0522的博客 3298

Spring Boot RESTful 风格四大请求编码模板(GET、POST、PUT、DELETE)

RESTful 风格与普通风格的差异主要体现在理念上,而编码风格差异不大,所以我们不需要有什么心理负担

weixin_52173250的博客 1023
上一篇: Springboot对JSP的支持
下一篇: vue调试工具vue-devtools安装及使用
迷失的小鹿
博客等级 码龄8年 1万+粉丝 199原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值