java spring MVC之RESTful快速开发

news/2024/11/15 8:44:12/

我这里有个一springboot项目
在这里插入图片描述
我在启动类同目录下创建了一个目录 目录名叫 controller
里面有一个UserController
diam结构是这样的

package com.example.threshold.controller;import com.example.threshold.user;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;//声明Controller控制器
@Controller
public class UserController {// 设置一个 GET接口  子路径get  接受一个id参数  id要跟在路径后面@RequestMapping(value = "/user/{id}",method = RequestMethod.GET)@ResponseBodypublic String getId(@PathVariable Integer id) {return "您要获取的用户id为"+id;}//设置一个 POST请求  子路径叫  add 接受一个name参数   需要传递的方式是一个 表单传参或者路径问号后传参方式带的参数@RequestMapping(value = "/user", method = RequestMethod.POST)@ResponseBodypublic String addUser(@RequestParam String name) {return "你要添加的用户名称为"+name;}//设置一个 PUT请求 子路径叫  edit   接受一个user类对象参数  要求json传参@RequestMapping(value = "/user", method = RequestMethod.PUT)@ResponseBodypublic user editUser(@RequestBody user user) {//把接到的json传回去return user;}// 设置一个DELETE请求  子路径为delete   接受一个参数id 和 一个type参数  接受方式为  表单或者 路径问号后携带参数@RequestMapping(value = "/user", method = RequestMethod.DELETE)@ResponseBodypublic String deleteUser(@RequestParam Integer id,Integer type) {return "你要删除的用户id为"+id+"操作类型为"+type;}
}

这是一个基础的REST风格风格开发 但其实 我们可以很大程度的简化

这里 我先启动项目
在这里插入图片描述
然后用Postman测试 这些都是可以正常访问 和 调用返回的
在这里插入图片描述
确认无误之后 我们开一个一个解决一下他们的简化快捷开发

首先 来做第一个简化 大家会发现 他们路径都是user 那么 简化最需要简的就是 重复部分 我们先改成这样

package com.example.threshold.controller;import com.example.threshold.user;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;//声明Controller控制器
@Controller
@RequestMapping("/user")
public class UserController {// 设置一个 GET接口  子路径get  接受一个id参数  id要跟在路径后面@RequestMapping(value = "/{id}",method = RequestMethod.GET)@ResponseBodypublic String getId(@PathVariable Integer id) {return "您要获取的用户id为"+id;}//设置一个 POST请求  子路径叫  add 接受一个name参数   需要传递的方式是一个 表单传参或者路径问号后传参方式带的参数@RequestMapping( method = RequestMethod.POST)@ResponseBodypublic String addUser(@RequestParam String name) {return "你要添加的用户名称为"+name;}//设置一个 PUT请求 子路径叫  edit   接受一个user类对象参数  要求json传参@RequestMapping(method = RequestMethod.PUT)@ResponseBodypublic user editUser(@RequestBody user user) {//把接到的json传回去return user;}// 设置一个DELETE请求  子路径为delete   接受一个参数id 和 一个type参数  接受方式为  表单或者 路径问号后携带参数@RequestMapping(method = RequestMethod.DELETE)@ResponseBodypublic String deleteUser(@RequestParam Integer id,Integer type) {return "你要删除的用户id为"+id+"操作类型为"+type;}
}

我们再次尝试访问 会确认一切正常
在这里插入图片描述
这里 触发 get 因为后面的id是路径参数 需要保留 其他 如果你想直接用user这个名字 就不需要加这个RequestMapping的value来声明路径了
如果你想叫 user/add 就可以 直接放

@RequestMapping(value = "/add",method = RequestMethod.POST)

然后 你会发现 全部都用了 ResponseBody
那么是不是重复 那我们干掉
写在类上面 每个方法就不需要单独加了 这个就表示 这个类下所有的方法都使用ResponseBody
在这里插入图片描述

然后是头上的

@Controller
@ResponseBody

其实很多类都会用 那么 我们就可以这样
将这两个注解干掉直接换成

@RestController

在这里插入图片描述
我们点进去看一下
在这里插入图片描述
都在这里面了

然后 我们发现 每一个方法都有一个 RequestMethod.请求方式 这个也可以写简单一点
我们直接改成这样

package com.example.threshold.controller;import com.example.threshold.user;
import org.springframework.web.bind.annotation.*;//声明Controller控制器
@RestController
@RequestMapping("/user")
public class UserController {// 设置一个 GET接口  子路径get  接受一个id参数  id要跟在路径后面@GetMapping("/{id}")public String getId(@PathVariable Integer id) {return "您要获取的用户id为"+id;}//设置一个 POST请求  子路径叫  add 接受一个name参数   需要传递的方式是一个 表单传参或者路径问号后传参方式带的参数@PostMappingpublic String addUser(@RequestParam String name) {return "你要添加的用户名称为"+name;}//设置一个 PUT请求 子路径叫  edit   接受一个user类对象参数  要求json传参@PutMappingpublic user editUser(@RequestBody user user) {//把接到的json传回去return user;}// 设置一个DELETE请求  子路径为delete   接受一个参数id 和 一个type参数  接受方式为  表单或者 路径问号后携带参数@DeleteMappingpublic String deleteUser(@RequestParam Integer id,Integer type) {return "你要删除的用户id为"+id+"操作类型为"+type;}
}

DeleteMapping声明delete 请求
PutMapping声明put 请求
PostMapping声明post 请求
GetMapping声明get 请求
如果 有路径 或者路径参数这几 在后面接 (“/后面的内容”)
就好了


http://www.ppmy.cn/news/84896.html

相关文章

【Flutter 工程】002-代码生成:Freezed ——类似 Java 的 lombok

【Flutter 工程】002-代码生成:Freezed ——类似 Java 的 lombok 文章目录 【Flutter 工程】002-代码生成:Freezed ——类似 Java 的 lombok一、概述1、简介2、主要功能3、主页与使用前后比较主页使用前使用后 二、基本使用1、安装2、改造 main.dart3、创…

言之画: AI绘画平台

【产品介绍】 言之画是出门问问推出的AI绘画平台。支持二次元、蒸汽朋克、插画等 8 种创作风格。用户只需输入文字,「言之画」就能一次性生成 8 张光影逼真、细节丰富的 2K 高分辨率图像。 除了以文生图,它还拥有以图生图、动图生成、个性头像生成等 AI …

有意思的CVE-2022-0337复现

前言 前两天在刷tw,看到了个比较有意思的一个CVE漏洞,价值奖励是10000美🔪,比较好奇的是价值10000美🔪的漏洞是什么样子的[苦涩],漏洞利用就是需要在浏览器中进行用户交互才能触发该漏洞,但由于…

一文揭秘高效稳定的 Apache Doris 内存管理机制

作者:SelectDB 高级研发工程师、Apache Doris Committer 邹新一 背景 Apache Doris 作为基于 MPP 架构的 OLAP 数据库,数据从磁盘加载到内存后,会在算子间流式传递并计算,在内存中存储计算的中间结果,这种方式减少了频…

如何创建Vue实例?Vue实例有哪些属性和方法

Vue实例就是Vue的实例化对象,就像你有一个iPhone,那么iPhone就是你的实例化对象。要创建Vue实例,就像你想拥有一部iPhone一样,首先要有一个设计图。 这个设计图就相当于Vue实例的options对象,你可以设置它的属性&…

【资料分享】高边、低边晶体管开关及电路解析

高边和低边晶体管开关 电路中,晶体管常常被用来当做开关使用。晶体管用作开关时有两种不同的接线方式:高边(high side)和低边(low side)。 高边和低边是由晶体管在电路中的位置决定的。晶体管可以是双极性晶体管(BJT…

R语言实践——rWCVP:按照物种的原生分布区清洗坐标点

rWCVP:按照物种的原生分布区清洗坐标点 加载库工作流(单个物种)1. 下载发现记录数据(rgbif)2. 发现记录的预备3. 获取原生区范围4. 清除非原生分布记录 加载库 library(rWCVP) library(rgbif) library(tidyverse) lib…

【万字长文】深度解析 Transformer 和注意力机制(含完整代码实现)

深度解析 Transformer 和注意力机制 在《图解NLP模型发展:从RNN到Transformer》一文中,我介绍了 NLP 模型的发展演化历程,并用直观图解的方式为大家展现了各技术的架构和不足。有读者反馈图解方式虽然直观,但深度不足。考虑到 Tra…