当前位置: 首页 > article >正文

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


http://www.kler.cn/a/554336.html

相关文章:

  • SpringBoot 项目配置日志输出
  • mysql中union all和WITH ROLLUP实现汇总的两种方式
  • Flink CDC详解
  • 在实时大数据处理中如何平衡延迟和吞吐量
  • AI(12)-设备端部署
  • 基于腾讯云大模型知识引擎×DeepSeek构建八字、六爻赛博算卦娱乐应用
  • 【Research Proposal】基于提示词方法的智能体工具调用研究——研究背景
  • 力扣hot100——螺旋矩阵 超简单易懂的模拟搜索方法
  • FastGPT快速将消息发送至飞书
  • OpenCV形态学操作
  • Spring DI
  • 【AB-01】 AUTOSAR Builder软件安装
  • Debezium 报错:“The db history topic is missing” 的处理方法
  • 知识库-知识收藏、取消收藏接口
  • Hutool - DB:基于 ActiveRecord 思想的 JDBC 封装数据操作工具
  • 爱普生 SG-8101CE 可编程晶振在笔记本电脑的应用
  • LabVIEW开发中的电机控制与相机像素差
  • 智能检测摄像头模块在客流统计中的应用
  • Mongoose 搜索注入漏洞分析
  • Elasticsearch7.1.1 配置密码和SSL证书