SpringMVC的基本使用

@controller标记一个类是控制器类

@RequestMapping 进行路由映射可以是类也可以是方法,路由的/可以不加,但建议加上

1)简单的映射返回一个hello

@RequestMapping("/m1")public String m1() { return "hello";}

2)可以通过方法中的参数获取对应键值对,/*请求的参数如果放在body里会自动的填充到参数对象里,在url就需要@RequestParam来映射.需要注意的是get请求无法接收body里的参数,只能接收url里的(也算是规范程序员的一种方式了).这是错的我给注释掉了*/

@RequestMapping("/m2")public String m2(String name, Integer age){ return "name: " + name + " age: " + age;}

3)需要注意的是当参数类型为基本类型的时候必须要传这个参数,否则会报错

@RequestMapping("/m3")public String m3(String name, int age){ return "name: " + name + " age: " + age;}

4)建议使用类来做参数,修改代码就不用修改参数,只需要去类里添加属性。而且类里要提供对应的Setter方法(我尝试不加setter方法,无法获取到传递的参数,而值提供setter去可以获得)。如果权限是private则还要提供getter方法,不过不是必须的。

@RequestMapping("/m4")public String m4(Person person){ return "name: " + person.name + " age: " + person.age;}

可以使用这个注解让我们在传参的时候key是name而不是username。但注意后面的required默认是true,意思是这个是个必传参数,而改成false后就不是必传参数了。

@RequestMapping("/m5")public String m5(@RequestParam(value = "name",required = false) String username,Integer age) { return "name: " + username + " age: " + age;}

6)我们也可以传一个数组,在传参的时候用,分隔value也可以当做多个键值对来传

@RequestMapping("/m6")public String m6(String[] names) { return Arrays.toString(names) + "len: " + names.length;}

7)传一个集合和数组的传参没什么区别就是在参数前要加一个注解

@RequestMapping("/m7")public List<String> m7(@RequestParam(required = false) List<String> names) { return names;}

8)在body中存放json数据可以通过这个注解来标志一下,我们的键值对就可以写在body里了

@RequestMapping("/m8")public String m8(@RequestBody Person person) { return person.toString();}

9) 可以通过这种方式来获取URL中的信息@PathVariable后面的括号是指定路由中的这个键值对给后面的变量,不加就默认跟着相同的变量名,如果是没有就会报错。

@RequestMapping("/m9/{name}/{age}")public String m9(@PathVariable("age") Integer age,@PathVariable("name") String name) { return name + " " + age;}

10)可以通过@RequestPart注解传一个文件,键值对的形式,键名要与参数对应。

@RequestMapping("/m10")public String m9(@RequestPart MultipartFile file) { return "file" + file.getOriginalFilename();}

11)有两种方式获取cookie,一种是使用servlet的方法,可以获取全部的cookie,一种是用注解获取对应的cookie

@RequestMapping("/getCookie")public String getCookie(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); return cookies[0].getName() + " " + cookies[0].getValue();}@RequestMapping("/getCookie2")public String getCookie2(@CookieValue String name) { return name;}

有三种方法获取session也是servlet和Springmvc的两种

@RequestMapping("/getSession")public String getSession(HttpServletRequest request) { HttpSession session = request.getSession(); String name = (String) session.getAttribute("name"); return name;}@RequestMapping("/getSession2")public String getSession2(@SessionAttribute(required = false) String name) { return name;}@RequestMapping("/getSession3")public String getSession2(HttpSession session) { String name = (String)session.getAttribute("name"); return name;}

13)两种获取header的方法

@RequestMapping("/getHeader")public String getHeader(HttpServletRequest request) { String usa = request.getHeader("User-Agent"); return usa;}@RequestMapping("/getHeader2")public String getHeader2(@RequestHeader("User-Agent") String usa) { return usa;}

14)@RequestBody可以修饰方法和类表面返回的是数据,@RestController和@Controller都只能修饰类前者返回的是数据后者返回的是页面

@RequestMapping("/return")@Controllerpublic class Return { @RequestMapping("/index") public String index() { return "/index.html"; } @ResponseBody @RequestMapping("/index2") public String index2() { return "/index.html"; }}

15)当返回的是对象(除了String)的时候会转换成Json格式

@ResponseBody@RequestMapping("/ReturnJson")public Person ReturnJson() { Person person = new Person(); person.age = 18; person.name = "zhansgan"; return person;}

16)设置响应的状态码

@ResponseBody@RequestMapping("/setStatus")public String setStatus(HttpServletResponse response) { response.setStatus(401); return "ss";}

设置响应的状态码

@ResponseBody@RequestMapping("/myHeader")public String myHeader(HttpServletResponse response) { response.setHeader("myHeader","myHeader"); return "ss";}

@RequestParam

把参数设置为必传参数,也可以设置不传参数的时候的默认值

这样设置就是非必传

这样设置前端传来的参数名就得是id

相关推荐
maosheng114617 小时前
RHCSA的第一次作业
linux·运维·服务器
wifi chicken18 小时前
Linux 端口扫描及拓展
linux·端口扫描·网络攻击
旺仔.29118 小时前
Linux 信号详解
linux·运维·网络
放飞梦想C18 小时前
CPU Cache
linux·cache
Hoshino.4119 小时前
基于Linux中的数据库操作——下载与安装(1)
linux·运维·数据库
播播资源21 小时前
CentOS系统 + 宝塔面板 部署 OpenClaw源码开发版完整教程
linux·运维·centos
小涛不学习21 小时前
手写线程池(从0实现 ThreadPoolExecutor 核心思想)
windows
源远流长jerry21 小时前
在 Ubuntu 22.04 上配置 Soft-RoCE 并运行 RDMA 测试程序
linux·服务器·网络·tcp/ip·ubuntu·架构·ip
twc82921 小时前
大模型生成 QA Pairs 提升 RAG 应用测试效率的实践
服务器·数据库·人工智能·windows·rag·大模型测试
lay_liu21 小时前
Linux安装redis
linux·运维·redis