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

相关推荐
一苇所如12 分钟前
jupyter已经安装但是无法通过命令行启动
linux·windows·jupyter
Vicssic34 分钟前
【Linux 网络】网络工具ifconfig和iproute/iproute2工具详解
linux·运维·网络
编程乐趣34 分钟前
基于C#开发的适合Windows开源文件管理器
开发语言·windows·c#
染指111044 分钟前
18.第二阶段x64游戏实战-MFC列表框
汇编·c++·windows·游戏·游戏逆向·x64dbg
Galeoto1 小时前
how to install linux perf through deb file
linux·运维·服务器
为什么要做囚徒2 小时前
CentOS网络之network和NetworkManager深度解析
linux·网络·centos·network·networkmanager
QuartusII72 小时前
如何禁止AutoCAD这类软件联网
运维·windows·电脑
凌叁儿2 小时前
使用模块中的`XPath`语法提取非结构化数据
windows·python·beautifulsoup·pip
望获linux3 小时前
望获实时Linux系统荣获人形机器人技术突破奖
linux·运维·机器人·操作系统·开源软件·rtos
YONG823_API4 小时前
借助电商 API 接口实现电商平台商品数据分析的详细步骤分享
数据库·爬虫·microsoft·数据挖掘·数据分析