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

SpringMVC2

一、springmvc 接收请求

类上、方法上

@RequestMapping

@GetMapping

@PostMapping

package com.hl.springmvc02.web;
​
import jdk.nashorn.internal.objects.annotations.Getter;
import org.springframework.web.bind.annotation.*;
​
@RestController
@RequestMapping("/user")
public class UserController {//get 请求默认访问方法@GetMappingpublic String welcome(){System.out.println("welcome");return "welcome!";}//post请求执行的默认方法@PostMappingpublic String welcome2(){System.out.println("welcome2");return "welcome2!";}/*url: http://localhost:8080/user/save@RequestMapping:默认情况下,接收任意类型请求限制只能接收特定请求  method = RequestMethod.GET 只接收get请求method = RequestMethod.GET|POST|PUT|DELETE*/@RequestMapping(value = {"/save1","/save2","/save"},method = RequestMethod.GET)public void save(){System.out.println("save");}
}
​

二、springmvc 接收数据

1、接收参数
package com.hl.springmvc02.web;
​
import com.hl.springmvc02.pojo.Product;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
​
import javax.servlet.http.HttpServletRequest;
​
@RestController
@RequestMapping("/product")
public class ProductController {/*接收数据方式一、原生 HttpServletRequest 接收数据*/@RequestMapping("/save")public String save(HttpServletRequest request){//接收参数  返回值只能是字符串类型String name = request.getParameter("name");String id = request.getParameter("id");//类型转换时,需要手动转换if(id !=null && id!=""){System.out.println(Integer.parseInt(id));}return "save!"+id+"---"+name;}/*方式二:通过参数名称接收  要求  url后传递的参数名和方法的形参名保持一致http://localhost:8080/product/save2?id=11&name=admin尽可能使用包装类,而不是基本数据数据类型*/@RequestMapping("/save2")public String save2(Integer id,String name){return "save!"+id+"--"+name;}@RequestMapping("/save3")public String save3(int id,String name){return "save!"+id+"--"+name;}/*方式三、参数名称不一致时  @RequestParam(name = "username")  参数映射1、限制是否允许为空  @RequestParam 默认不允许为空@RequestParam(required = false)required = false  是否允许为空2、是否给默认值 @RequestParam(defaultValue = "12345")*/@RequestMapping("/save4")public String save4(@RequestParam(defaultValue = "12345",required = false) Integer id,@RequestParam(name = "username") String name){return id+"---"+name;}/*方式四、通过对象接收数据 (当前端传递的参数名和对象的属性名保持一致时)http://locahost:8080/product/save5?id=12&name=admin*/@RequestMapping("save5")public Product save5(Product product,String name1){System.out.println(name1);return  product;}/*方法五、restful风格接收(@PathVariable 地址栏传参)http://localhost:8080/product/save6/1/admin微服务中推荐的模式*/@RequestMapping("/save6/{id1}/{name}")public Product save6(@PathVariable(name = "id1") Integer id,@PathVariable(required = false) String name){System.out.println(id+"---"+name);return new Product(id,name);}

2、cookie数据

/*cookie传递数据@CookieValue 从cookie中获取数据,根据key找到value*/
@RequestMapping("/cookie")
public String getCookie(@CookieValue(name = "username",required = false)String username){return username;
}

3、请求头中数据
@RestController
@RequestMapping("/order")
public class OrderController {
​/*@RequestHeader(name = "user-agent") String userAgent获取浏览器请求头中特定key对应的value*/@RequestMapping("/header")public String header(@RequestHeader(name = "User-Agent") String userAgent,@RequestHeader(name = "token") String token){return userAgent+"---"+token;}
}

4、接收其他controller转发的数据

业务操作:调用service

package com.hl.springmvc02.web;
​
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
​
import javax.servlet.http.HttpServletRequest;
​
@Controller
@RequestMapping("/s1")
public class DispatcherController {
​@RequestMapping("/getMsg")public String getMsg(HttpServletRequest request){System.out.println("getMsg......");//获取浏览器传递的参数String msg = request.getParameter("msg");//一次转发过程中携带数据(传递数据)request.setAttribute("msg1","hello world!");//转发到其他的controller方法return "/s1/getData";}
​@RequestMapping("/getData")public String getData(HttpServletRequest request,@RequestAttribute(required = false) String msg1){System.out.println("getData......");//获取request转发携带的数据System.out.println(request.getAttribute("msg1"));System.out.println("--注解获取--"+msg1);//转发到页面return "/index.html";}
}
 

三、前后端分离:返回数据给前端(前后端一体,转发,重定向页面跳转)

@ResponseBody
@RestController
统一返回数据格式

声明一个结果集R类

package com.hl.springmvc02.pojo;
​
import lombok.Data;
​
/*
R ---> 结果集对象(响应对象)
统一封装  服务端返回给前端的数据*/
@Data
public class R {private Integer code;//状态码private String msg;//描述信息private Object data;//传递的数据
​//成功的方法public static R ok() {return new R(200,"操作成功",null);}//成功的方法public static R ok(Object data) {return new R(200,"操作成功",data);}//成功的方法public static R ok(String msg ,Object data) {return new R(200,msg,data);}//失败的方法public static R fail(String msg) {return new R(201,msg,null);}
​public R(Integer code, String msg, Object data) {this.code = code;this.msg = msg;this.data = data;}
​public R() {}
}
 
package com.hl.springmvc02.web;
​
import com.hl.springmvc02.pojo.R;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
​
@RestController
@RequestMapping("/response")
public class ResponseController {@RequestMapping("/data")public R data(){//业务逻辑return R.ok();}@RequestMapping("/data2")public R data2(){return R.ok("新增成功",null);}@RequestMapping("/data3")public R data3(){return R.fail("用户名已存在!");}
}

四、各种常见错误及解决方案

常见错误类型:
404:路径未找到   http://localhost:8080/product/save4
405: 方法不匹配   前端get ---->  服务端@PostMapping       @RequestMapping(method="")
400: 参数赋值错误
       前端id=abc   服务端:Integer id
       前端没有传递id null  服务端  int id  null--->int 报错
       前端id没有传值     服务端  @RequestParam(required=true)  Integer id
500: 服务端错误
   1、接收到请求了
   2、接收到数据
   3、方法体报错

五、springmvc的内部执行流程

springmvc实现的功能

1、springmvc接收请求

2、springmvc接收数据

3、返回数据给前端

4、页面跳转(携带数据)

springmvc内部核心组件

1、DispatcherServlet 前端控制器

2、HandlerMapping 处理器映射器

3、HandlerAdapter 处理器适配器

4、Handler 处理器

5、ViewResolver 视图解析器组件

springmvc内部执行流程

六、mvc设计模式

MVC 架构 model 业务层、view 视图层、controller控制层

view 视图层:用户交互 html、css、js、vue、小程序

controller 控制层: 接收前端请求、接收前端数据、返回数据给前端 spring webmvc (web包)

model 业务层: 业务操作 service、dao、pojo

总结

1、接收请求的方式

@RequestMapping ,@GetMapping,@PostMapping 区别

2、接收数据

参数、请求头、cookie、接收其他controller转发的数据

@RequestBody 注解(没讲 ,接收前端传递的json数据)

3、返回数据给前端 R

code | msg | data

4、各种常见的错误及解决方案

http://www.lryc.cn/news/2382153.html

相关文章:

  • 【每日一题丨2025年5.12~5.18】排序相关题
  • ElasticSearch性能优化
  • Typora + PicGo + GitHub 配置图床——图片自动上传 详细教程
  • QT+Visual Studio 配置开发环境教程
  • 缺乏经验的 PCB 过孔建模方法
  • layui 介绍
  • 【漫话机器学习系列】265.普拉托变换的相关问题(Issues With Platt Scaling)
  • 【Linux高级全栈开发】2.2.1 Linux服务器百万并发实现2.2.2 Posix API与网络协议栈
  • LlamaIndex
  • springboot使用xdoc-report包导出word
  • leetcode 3356. 零数组变换 II 中等
  • 重拾GMP
  • 实验分享|基于千眼狼sCMOS科学相机的流式细胞仪细胞核成像实验
  • C++学习:六个月从基础到就业——C++11/14:其他语言特性
  • 【Linux笔记】——线程池项目与线程安全单例模式
  • 数据驱动的社会舆情监测与分析——用算法洞察世界脉动
  • OD 算法题 B卷 【最佳植树距离】
  • ZooKeeper 原理解析及优劣比较
  • 实战5:个性化数字艺术生成与销售
  • 是德科技 | 单通道448G未来之路:PAM4? PAM6? PAM8?
  • OceanBase 开发者大会,拥抱 Data*AI 战略,构建 AI 数据底座
  • STM32IIC协议基础及Cube配置
  • CNN vs ViT:图像世界的范式演进
  • cocos creator使用jenkins打包微信小游戏,自动上传资源到cdn,windows版运行jenkins
  • 定时器的两种实现方式
  • Python、Pytorch、TensorFlow、Anconda、PySide、Jupyter
  • [Java实战]Spring Boot整合MinIO:分布式文件存储与管理实战(三十)
  • MacBook Air A2179(Intel版)安装macOS Catalina所需时间
  • AI在人力资源领域的应用:把握时代浪潮
  • 【VxWorks 实时操作系统(RTOS)】常用函数汇总