1、请求处理参数

1.1 请求参数 @RequestParam

1.1.1 不使用 @RequestParam 注解

请求参数处理, 不使用参数注解 :

1.如果 请求参数名 和请求处理的 形参名一致 ,springMvc 框架会 自动 将你的请求 参数名对应的参数值 , 绑定 到请求方法的 形参中 , 方法内 就可以 直接使用 ,不用手动获取;

2.如果你的请求 没有携带参数 ,不会报错,只不过,请求处理方法的 形参值都是null或其他值 ,如果请求处理方法形参是一个实体参数,原理和单个类型参数一致(只要请求参数名和实体名一致也可以自动绑定);

测试不使用 @RequestParam 注解

@RequestMapping("/testSpringMvcNoRequestParam")
public String testSpringMvcNoRequestParam( String userId,String userName){System.out.println(String.format("------ 请求参数:uid :%s ,uname:%s------",userId,userName));return "success";
}

测试 请求不带参数

测试 请求带参数

1.1.3 使用 @RequestParam 注解

@RequestParam 只能 写在请求方法的 形参上 ;

required = false 设置 参数不是必传 ;

defaultValue 默认值 ;

  • 1.如果请求处理方法,形参前, 只增加了此注解 ,没有指定任何属性:

    • 作用:当前 形参必传 ,且 参数名 与 形参名 必须 一致 ,如果不一致,参数绑定失败,请求直接报400错误,提示你的参数没有提供;
  • 2.如果请求处理方法,形参前,只 增加了此注解 ,并 添加了value属性值 :
    • 作用:请求的 参数名 必须和 value属性指定 的名称一致,此value属性可以省略(只写 请求参数别名时,如果有其他的属性,value属性必须指定);
  • 3.如果要 取消 每个参数的 必传校验 ,可以给此注解增加属性 required=false (默认是true,必传),参数可以不传,不需要参数值的绑定;
  • 4.如果某个参数必传,但是为了防止请求没有携带此参数,可以通过指定属性 defaultValue增加默认值 ,如果调用当前请求方法处理,没有提供参数,自动使用默认值,绑定到方法的对应形参中;

测试

@RequestMapping("/testSpringMvcRequestParam")
public String testSpringMvcRequestParam(@RequestParam("uid") String userId,@RequestParam(value = "uname",required = false,defaultValue = "KH96-mvc") String userName,@RequestParam String userPwd){System.out.println(String.format("------ 请求参数:uid :%s ,uname:%s,uPwd:%s------",userId,userName,userPwd));return "success";

测试结果

1.2 请求头参数 @RequestHeader

请求头参数@RequestHeader:

  • 处理 请求头携带参数;
  • 作用:从请求头中获取参数,根据别名或者参数形参名,将请求头对应参数值,绑定到请求处理方法的形参中,直接使用,用法跟@RequestParam类似,也可以指定是否必传,默认值;

测试

@RequestMapping("/testSpringMvcNoRequestHeader")
public String testSpringMvcNoRequestHeader(@RequestHeader(value = "token",required = false,defaultValue = "KH96_mvc") String token){System.out.println(String.format("------ 请求头参数:token :%s ------",token));return "success";
}

测试结果

1.3 Cookie 参数 @CookieValue

@CookieValue:

从 cookie中获取参数 ,根据别名或者参数形参名,将 请求头对应参数值 , 绑定 到请求处理方法的 形参中 ,直接使用,用法跟@RequestParam,@RequestHeader类似,也可以指定 是否必传 , 默认值 ;

测试

@RequestMapping("/testSpringMvcCookieValue")
public String testSpringMvcCookieValue(@CookieValue("JSESSIONID") String sessionId){System.out.println(String.format("------ 请求cookie参数:JSESSIONID :%s ------",sessionId));return "success";
}

测试结果:

1.4 实体参数

请求参数处理 实体参数 :

自动将请求参数自动将实体的 属性名与形参绑定 ,原理和单个参数类型一致;

测试


@RequestMapping("/testSpringMvcBeanParam")
public String testSpringMvcBeanParam(UserVO userVO){System.out.println(String.format("------ 请求实体参数:userVO :%s ------",userVO));return "success";
}

测试结果

1.5 原生servlet的API接口作为请求参数

用法和javaWeb截断学习的用法完全一致;


@RequestMapping("testSpringMvcServletAPI")
public  void testSpringMvcServletAIP(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws IOException, ServletException {
//获取请求方式
System.out.println(String.format("------ 请求方式:%s ------",request.getMethod()));//获取请求参数
System.out.println(String.format("------ 请求参数:%s ------",request.getParameter("userTel")));//手动转发
// request.getRequestDispatcher("/WEB-INF/views/success.jsp").forward(request,response);//获取session对象
//手动添加参数
HttpSession sessionHad = request.getSession();//sessionHad.setAttribute("userTel",request.getParameter("userTel"));//方式2;直接将HttpSession对象声明在请求处理方法的形参中,可以自动获取 session//重定向到
//        response.sendRedirect("http://www.baidu.com");

}
//获取请求方式
System.out.println(String.format("------ 请求方式:%s ------",request.getMethod()));

//获取请求参数
System.out.println(String.format("------ 请求参数:%s ------",request.getParameter("userTel")));//手动转发
// request.getRequestDispatcher("/WEB-INF/views/success.jsp").forward(request,response);//获取session对象
//手动添加参数
HttpSession sessionHad = request.getSession();//sessionHad.setAttribute("userTel",request.getParameter("userTel"));//方式2;直接将HttpSession对象声明在请求处理方法的形参中,可以自动获取 session//重定向到
//        response.sendRedirect("http://www.baidu.com");

}</pre>

2、响应数据处理

2.1 ModelAndView

ModelAndView 的 数据模型放在request的作用域中 , 视图模型 ,放在 request.getRequestDispatcher(前缀+视图名字+后缀) ;

结论:SpringMVC框架的 前端核心控制器 ,会自动将返回的ModelAndView对象中的 数据模型 ,添加到 request作用域 中 使用内部转发方式 ,转发到目标视图;

测试

@RequestMapping("/testSpringMvcModelAndView")
public ModelAndView testSpringMvcModelAndView(String userEmail){//创建一个 ModelAndView 对象ModelAndView mav = new ModelAndView();//添加模型数据mav.addObject("uemail",userEmail);//可以添加多个模型数据,内部使用ModelMap集合存放的mav.addObject("uage",18);//设置目标视图mav.setViewName("ok");//返回  ModelAndView 对象return  mav;}

测试结果

2.2 Map

要求:使用 map返回模型数据 ,必须将map 声明在 请求处理方法的 形参中 ,定义在方法的内部是无效的;

总结:

  • 1.springMVC 底层在调用目标请求处理方法前 ,会自动创建一个 Model接口的隐含对象 作为 模型数据 的 存储对象 ,如果目标请求 处理方法定义了一个map接口 , 自动将隐含对象使用引用传递方式传递到目标请求处理方法中 ,方法体内就可以 直接添加模型数据 ;
  • 2.SpringMvc底层,在调用完你的请求处理方法后,不管返回什么类型,都会被转换为一个 ModelAndView对象 ;

测试

@RequestMapping("/testSpringMvcMap")
public  String testSpringMvcMap(String userEmail, Map<String,Object> map){//输出map的目标类型System.out.println(map.getClass().getName());//org.springframework.validation.support.BindingAwareModelMap//添加模型数据map.put("uemail",userEmail);//返回目标视图名称return "ok";}

测试结果

2.3 Model

Model,可以添加模型数据;

必须将 Model 声明 在请求处理方法的 形参中 ,定义在方法的内部是无效的,用法跟Map 一致;

测试

@RequestMapping("/testSpringMvcModel")
public  String testSpringMvcModel(String userEmail, Model model){//添加模型数据model.addAttribute("uemail",userEmail);//返回目标视图名称return "ok";}

测试结果

2.4 forward: 转发 和 redirect: 重定向

2.4.1forward 转发

只需要在返回的视图名称前,增加一个前缀:forward 即可,直接转发到目标资源;

当前请求处理方法中的模型对象可以带走;

@RequestMapping("/testSpringMvcForward")
public String testSpringMvcForward(Map<String,Object> map){//转发页面跳转//return "forward:/forward.jsp";//转发到其他请求中//return "forward:/testSpringMvcModel?userEmail=123@qq.com";//自定义转发,携带模型数据map.put("uaddr","nj_wd_kh96");return "forward:/testSpringMvcModel?userEmail=123@qq.com";
}

2.4.2 redirect 重定向

只需要在返回的视图名称前,增加一个前缀:redirect 即可,不做视图解析器,直接重定向

注意,重定向,当前请求处理方法中的模型对象不能带走

@RequestMapping("/testSpringMvcRedirect")
public String testSpringMvcRedirect(){//重定向页面跳转//return "redirect:/redirect.jsp";//重定向 可以重定向到 其他请求中return "redirect:/testSpringMvcModel?userEmail=123@qq.com";}

2.5 @ResponseBody

返回JSON数据;

  • 注意:返回 不需要手动转换为json字符串 ,直接返回对象;
  • @ResponseBody 将返回请求处理方法返回的源对象数据, 直接转换为json格式字符串 ,返回, 不走视图解析 ;
  • 注意:必须增加 Jackson依赖的jar包 ,否者报错,且必须要增加注解扫描 <mvc:annotation-driven></mvc:annotation-driven> 才可以;
  • 位置:可以写在请求处理方法上或者类上,写在 类上 ,就是对当前类中 所有请求处理方法生效 ,写在方法上,只有对 当前方法生效 ;

2.5.1 jar包

<!-- JSON begin -->
<!--jackson-->
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-core</artifactId><version>2.8.4</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.8.4</version>
</dependency>
<dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-annotations</artifactId><version>2.8.4</version>
</dependency>
<!--jackson-->
<!-- JSON end -->

2.5.2 配置

<beans xmlns=xmlns:mvc="http://www.springframework.org/schema/mvc"http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
"><!-- 开启MVC 的注解扫描 --><mvc:annotation-driven></mvc:annotation-driven></beans>

2.5.3 测试

@RequestMapping("/testSpringMvcJson")
@ResponseBody
public UserVO testSpringMvcJson(){//模拟获取去用户详情对象UserVO userVO = new UserVO();userVO.setUserId("KH96_01");userVO.setUserName("GKC");userVO.setUserPwd("123");return userVO;}

测试结果

SpringMvc- 请求处理参数 和 响应数据处理相关推荐

  1. springmvc 全局编码_SpringMVC请求参数和响应结果全局加密和解密

    前提 前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数据报文包括三个部分: 1.t ...

  2. 面试官:小伙汁,你画的SpringMVC请求处理过程是从网上抄的吧?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 作者:Sicimike blog.csdn.net/Bai ...

  3. 【SSM框架系列】SpringMVC的请求和响应

    request和response request对象的作用 获取请求参数 作为域对象存取数据 获取请求头 请求转发 response功能 回写数据,JSON格式字符串 页面跳转(请求重定向) Spri ...

  4. (转)SpringMVC学习(五)——SpringMVC的参数绑定

    http://blog.csdn.net/yerenyuan_pku/article/details/72511611 SpringMVC中的参数绑定还是蛮重要的,所以单独开一篇文章来讲解.本文所有案 ...

  5. 返回结果乱码_Spring请求参数和响应结果全局加密和解密(1)

    阅读文本大概需要25分钟. 前提 前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数 ...

  6. Spring请求参数和响应结果全局加密和解密(1)

    阅读文本大概需要25分钟. 前提 前段时间在做一个对外的网关项目,涉及到加密和解密模块,这里详细分析解决方案和适用的场景.为了模拟真实的交互场景,先定制一下整个交互流程.第三方传输(包括请求和响应)数 ...

  7. springmvc请求参数异常处理

    springmvc请求参数异常处理 参考文章: (1)springmvc请求参数异常处理 (2)https://www.cnblogs.com/nosqlcoco/p/5844160.html 备忘一 ...

  8. SpringMVC获取参数的几种方式

    SpringMVC获取参数的几种方式 前言: 年末了,忙了一年了却发现系统的整理的东西很少,一些基础的东西都未做整理,这里就将它随便整理一下,增加一些印象,当然在网上看到一些好的资料也会整理下来以备后 ...

  9. springMVC接受参数总结

    springMVC接受参数分类及使用对应注解才能正确接受到参数,否则报400或者接受的参数值为null: 1.接受单个参数 @RequestParam 不需要转json串 2.接受一个实体 @Requ ...

最新文章

  1. Android之基于AssetManager实现换肤方案
  2. python编程快速上手_给Python小白推荐的40本入门书籍,帮你快速上手
  3. 今晚直播 | 旷视研究院王毅:用于条件图像生成的注意力归一化
  4. 1096 Consecutive Factors (20 分)_24行代码AC
  5. SAP OData 服务在 gateway 层出错,应该如何处理?通过一个错误消息 Query XXX is invalid or contains errors 来举例说明
  6. WCF中的方法重载 实现
  7. [小技巧][JAVA]判断字符串某一位是否是数字/字母
  8. mysql填写账户远程_mysql账户添加远程访问
  9. 前端面试常考的手写代码不是背出来的!
  10. kibana4 分析和搜索仪表板 安装和配置
  11. 高低温试验箱的11点使用注意事项说明
  12. 【逻辑漏洞】短信轰炸
  13. Python-根据文件名提取文件
  14. 十大BI报表可视化工具
  15. 第二章 SysML概览
  16. CNN:RCNN、SPPNet、Fast RCNN、Faster RCNN、YOLO V1 V2 V3、SSD、FCN、SegNet、U-Net、DeepLab V1 V2 V3、Mask RCNN
  17. 合工大现代企业管理期末报告--阿里巴巴企业管理模式探究
  18. CSP2021提高组游记
  19. 软工结对项目——地铁
  20. 申请Google AdSense联盟(还没有通过)

热门文章

  1. GD32F103基础教程—跑马灯实验(六)
  2. 页面强制全屏,且退出全屏提示用户无法退出
  3. 简单PageRank —— 希拉里邮件门
  4. Joplin真正稳健的同步方法,joplin误删如何恢复
  5. Python:PCA(principle component analysis)主成分分析手工代码实现
  6. Power BI Desktop 简体中文下载安装步骤
  7. 艾永亮:巴奴进驻上海,火锅市场暗战升级,超级产品的加法与减法
  8. 什么是Cookie?Cookie用来干什么的?
  9. 2020-04-26
  10. objects365数据集类别对应表