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

相关推荐
孙同学_34 分钟前
【Linux篇】基础IO - 文件描述符的引入
linux·运维·网络
张彦峰ZYF2 小时前
高频面试题(含笔试高频算法整理)基本总结回顾63
linux·运维·算法
椰萝Yerosius4 小时前
Ubuntu Wayland启动腾讯会议并实现原生屏幕共享
linux·ubuntu·腾讯会议
爪娃侠5 小时前
LeetCode热题100记录-【二叉树】
linux·算法·leetcode
rufeike7 小时前
Rclone同步Linux数据到google云盘
linux·运维·服务器
csdn_aspnet7 小时前
如何在 Linux 上安装 Python
linux·运维·python
良许Linux8 小时前
怎么自学嵌入式?
linux
良许Linux8 小时前
你见过的最差的程序员是怎样的?
linux
良许Linux8 小时前
想从事嵌入式软件,有推荐的吗?
linux
bookish_2010_prj10 小时前
Jupyter notebook定制字体
linux·python·jupyter