Spring MVC 接口数据

devtools/2025/3/23 18:27:18/

访问路径设置

@RequestMapping("springmvc/hello") 就是用来向handlerMapping中注册的方法注解!
秘书中设置路径和方法的对应关系,即@RequestMapping("/springmvc/hello"),设置的是对外的访问地址,

路径设置

精准路径匹配:

精准设置访问地址 /user/login,@RequestMapping 不要求必须以 / 开头(系统会默认在开头加上 / )

模糊路径匹配:

路径设置为 /product/* 

/* 为单层任意字符串 /product/a     /product/aaa 可以访问此handler

/product/a/a 不可以

路径设置为 /product/** 

/** 为任意层任意字符串

/product/a   /product/aaa  可以访问此handler 

/product/a/a 也可以访问

单层匹配和多层匹配:/*:只能匹配URL地址中的一层,如果想准确匹配两层,那么就写“/*/*”以此类推。/**:可以匹配URL地址中的多层。
其中所谓的一层或多层是指一个URL地址字符串被“/”划分出来的各个层次
这个知识点虽然对于@RequestMapping注解来说实用性不大,但是将来配置拦截器的时候也遵循这个规则。

类上和方法上的区别

类上提取公共部分,类上的不是必须有注解的,方法上是必须有注解的

java">//1.标记到handler方法
@RequestMapping("/user")
@RequestMapping("/user/login")
@RequestMapping("/user/register")
@RequestMapping("/user/logout")//2.优化标记类+handler方法
//类上
@RequestMapping("/user")
//handler方法上
@RequestMapping
@RequestMapping("/login")
@RequestMapping("/register")
@RequestMapping("/logout")

附带请求方式设定

method属性设置请求方式

java">@Controller
public class UserController {/*** 精准设置访问地址 /user/login* method = RequestMethod.POST 可以指定单个或者多个请求方式!* 注意:违背请求方式会出现405异常!*/@RequestMapping(value = {"/user/login"} , method = RequestMethod.POST)@ResponseBodypublic String login(){System.out.println("UserController.login");return "login success!!";}/*** 精准设置访问地址 /user/register*/@RequestMapping(value = {"/user/register"},method = {RequestMethod.POST,RequestMethod.GET})@ResponseBodypublic String register(){System.out.println("UserController.register");return "register success!!";}}

注解设置请求方式

java">- `@GetMapping`
- `@PostMapping`
- `@PutMapping`
- `@DeleteMapping`
- `@PatchMapping`
java">@RequestMapping(value = "/springmvc/hello", method = RequestMethod.GET)// 等于@GetMapping("/springmvc/hello")

 

但是 

@GetMapping("/springmvc/hello") 只能添加在方法上

接收参数

Param格式参数:key=value&key=value

json格式参数:{key:value, key:value}

param参数接收

1/直接接收

java">@Controller
public class HelloController {@GetMapping("/springmvc/hello")// @ResponseBody 只直接返回字符串给前端,不要找视图解析器@ResponseBody// http://localhost:8080/springmvc/hello?age=2&name=liu// todo 即使不传,也不会报错,所以在接口内最好进行参数校验public String hello(int age, String name){System.out.println("HelloController.hello");return "hello springmvc!!";}
}

2/@RequestParam注解 

可以设置是否必传,也可以设置默认值

value=“指定请求参数名”,默认与形参一致

java">@GetMapping(value="/data")
@ResponseBody
// http://localhost:8080/data?stuAge=2&name=liu
public Object paramForm(@RequestParam("name") String name, @RequestParam(value = "stuAge",required = false,defaultValue = "18") int age){System.out.println("name = " + name + ", age = " + age);return name+age;
}
一key多value

多选框,提交的数据的时候一个key对应多个值,我们可以使用集合进行接收!

java">@GetMapping("/param/mul")// @ResponseBody 只直接返回字符串给前端,不要找视图解析器@ResponseBody// http://localhost:8080/param/mul?hbs=吃&hbs=喝public String hello(@RequestParam List<String> hbs){System.out.println("HelloController.hello");return "hello springmvc!!";}

必须加@RequestParam,如果不加 @RequestParam ,会将 hbs 后的数据当作一个字符串直接赋值给  List<String> hbs

3/用实体接收

前端请求: http://localhost:8080/springmvc/hello?age=2&name=liu

可以不传,可以多传

 定义一个用于接收参数的实体类:

java">public class User {private String name;private int age = 18;// getter 和 setter 略
}
java">@Controller
@RequestMapping("param")
public class ParamController {@RequestMapping(value = "/user", method = RequestMethod.POST)@ResponseBodypublic String addUser(User user) {// 在这里可以使用 user 对象的属性来接收请求参数System.out.println("user = " + user);return "success";}
}

路径参数接收 

http://localhost:8080/springmvc/hello/23456

java">// 设置动态路经@GetMapping("/login/{account}/{password}")// @ResponseBody 只直接返回字符串给前端,不要找视图解析器@ResponseBody// @PathVariable String account 注解表示接收动态路经参数account位置的值// String account 表示接收param中key=account时对应的value值public String login(@PathVariable String account, @PathVariable String password){System.out.println("HelloController.hello");return "hello springmvc!!";}

路径参数与形参不一样时,也可以  @PathVariable("account") 注解指定

java">// 设置动态路经@GetMapping("/login/{account}/{password}")// @ResponseBody 只直接返回字符串给前端,不要找视图解析器@ResponseBody// @PathVariable String account 注解表示接收动态路经参数account位置的值// String account 表示接收param中key=account时对应的value值public String login(@PathVariable("account") String id, @PathVariable String password){System.out.println("HelloController.hello");return "hello springmvc!!";}

 json参数接收

 前端发送 JSON 数据的示例:

java">{"name": "张三","age": 18,"gender": "男"
}

 定义一个用于接收 JSON 数据的 Java 类:

java">public class Person {private String name;private int age;private String gender;// getter 和 setter 略
}

 controller:使用 @RequestBody 注解(即接收请求体)来接收 JSON 数据,并将其转换为 Java 对象

如果不加 @RequestBody ,那它接收的是param数据

java">@PostMapping("/person")
@ResponseBody
public String addPerson(@RequestBody Person person) {// 在这里可以使用 person 对象来操作 JSON 数据中包含的属性return "success";
}

利用postman验证之后发现报错:

原因: 无法处理json

解决:1/导入json处理的依赖;2/handlerAdapter配置json转化器

 pom.xml 加入jackson依赖 :

<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.15.0</version>
</dependency>

 @EnableWebMvc handlerAdapter配置json转化器

//json数据处理,必须使用此注解,因为他会加入json处理器

 

接收cookie数据

 使用 @CookieValue 注释将 HTTP Cookie 的值绑定到控制器中的方法参数

java">JSESSIONID=415A4AC178C59DACE0B2C9CA727CDD84
java">@GetMapping("/demo")
public void handle(@CookieValue("JSESSIONID") String cookie) { //...
}

 存cookie:

java">@GetMapping("save")public String save(HttpServletResponse response){Cookie cookie = new Cookie("JSESSIONID", "415A4AC178C59DACE0B2C9CA727CDD84");response.addCookie(cookie);return "ok";}

接收请求头数据

 @RequestHeader 批注将请求标头绑定到控制器中的方法参数

java">Host                    localhost:8080
Accept                  text/html,application/xhtml+xml,application/xml;q=0.9
Accept-Language         fr,en-gb;q=0.7,en;q=0.3
Accept-Encoding         gzip,deflate
Accept-Charset          ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive              300
java">@GetMapping("/demo")
public void handle(@RequestHeader("Accept-Encoding") String encoding, @RequestHeader("Keep-Alive") long keepAlive) { //...
}

 

原生API对象操作????

 

Controller method argument 控制器方法参数Description
jakarta.servlet.ServletRequest, jakarta.servlet.ServletResponse请求/响应对象
jakarta.servlet.http.HttpSession强制存在会话。因此,这样的参数永远不会为 null
java.io.InputStream, java.io.Reader用于访问由 Servlet API 公开的原始请求正文。
java.io.OutputStream, java.io.Writer用于访问由 Servlet API 公开的原始响应正文。
@PathVariable接收路径参数注解
@RequestParam用于访问 Servlet 请求参数,包括多部分文件。参数值将转换为声明的方法参数类型。
@RequestHeader用于访问请求标头。标头值将转换为声明的方法参数类型。
@CookieValue用于访问Cookie。Cookie 值将转换为声明的方法参数类型。
@RequestBody用于访问 HTTP 请求正文。正文内容通过使用 HttpMessageConverter 实现转换为声明的方法参数类型。
java.util.Map, org.springframework.ui.Model, org.springframework.ui.ModelMap共享域对象,并在视图呈现过程中向模板公开。
Errors, BindingResult验证和数据绑定中的错误信息获取对象!
java">/*** 如果想要获取请求或者响应对象,或者会话等,可以直接在形参列表传入,并且不分先后顺序!* 注意: 接收原生对象,并不影响参数接收!*/
@GetMapping("api")
@ResponseBody
public String api(HttpSession session , HttpServletRequest request,HttpServletResponse response){String method = request.getMethod();System.out.println("method = " + method);return "api";
}

 

共享域对象操作????

 


http://www.ppmy.cn/devtools/169040.html

相关文章

Spark DataFrame、Dataset 和 SQL 解析原理深入解析(万字长文多张原理图)

目录 1. Spark SQL 概述 1.1 Spark 整体架构概览 1.2 DataFrame 与 Dataset 简介 2. RDD 与 Spark 的分布式架构基础 2.1 弹性分布式数据集(RDD) 2.2 Spark 的分布式执行模型 3. SQL 解析流程与 Catalyst 优化器 3.1 SQL 解析流程概述 3.2 解析阶段与抽象语法树(AST…

去中心化交易所与中心化交易所的差异

在2025年数字货币市场爆发式增长的背景下&#xff0c;去中心化交易所&#xff08;DEX&#xff09;与中心化交易所&#xff08;CEX&#xff09;的竞争已从技术维度延伸至金融治理范式层面。两者的差异不仅体现在资产托管方式&#xff0c;更折射出对金融权力分配、风险控制逻辑和…

[HelloCTF]PHPinclude-labs超详细WP-Level 1-FILE协议

源码分析 <?php include("get_flag.php");isset($_GET[wrappers]) ? include("file://".$_GET[wrappers]) : ;highlight_file(__FILE__); ?>第一句 include("get_flag.php");, 使代码包含了 get_flag.php 的内容 大概是生成 Flag 之类的…

昆仑万维开源R1V:38B参数多模态推理模型开启AI新纪元

在AI技术竞争白热化的今天&#xff0c;中国公司昆仑万维以一场震撼的开源行动&#xff0c;向全球展示了其在多模态推理领域的突破。R1V&#xff08;Skywork R1V&#xff09;——全球首个工业级开源多模态推理模型&#xff0c;以380亿参数规模直逼DeepSeek-R1的推理能力&#xf…

k8s服务中userspace,iptables,和ipvs的比较

在 Kubernetes 中&#xff0c;kube-proxy 是负责实现服务负载均衡的组件。它支持三种代理模式&#xff1a;userspace、iptables 和 ipvs。这三种模式在性能、功能和复杂性上有所不同。以下是它们的详细比较&#xff1a; 1. Userspace 模式 Userspace 是 Kubernetes 最早支持的…

Tailwind CSS 学习笔记(三)

TailWind CSS 中的七大核心概念之一 —— 功能优先 (我个人的理解,Tailwind CSS 中预定义类基本以功能命令,看类名基本上可以知道是干什么用的。) 你还在为写CSS 时,冥思苦想编写类名而烦恼吗? 你还在为CSS 代码编写太多,文件过大而烦恼吗? 你还在为修改CSS 样式时,“…

自然语言处理入门

第一章 自然语言处理入门 1 什么是自然语言处理 【什么是人工智能&#xff0c;分别对应哪几个领域】 AI是模仿甚至超越人的某项机能&#xff0c;NLP、CV、ASR NLP是机器理解并生成人类语言2 自然语言处理的发展简史 1950 -- 图灵提出“机器能思考吗”&#xff0c;划时代性的…

深入解析 .NET Core 垃圾回收(GC):概念、工作原理与优化策略

引言 在软件开发中&#xff0c;内存管理一直是一个至关重要的问题。垃圾回收&#xff08;GC&#xff0c;Garbage Collection&#xff09; 是现代编程语言&#xff08;包括 .NET Core&#xff09;中非常重要的一个特性。它自动管理内存&#xff0c;减少了开发者手动管理内存分配…