ToB企服应用市场:ToB评测及商务社交产业平台

标题: SpringMvc(二)- 请求处理参数 和 响应数据处理 [打印本页]

作者: 大连全瓷种植牙齿制作中心    时间: 2022-9-16 17:25
标题: SpringMvc(二)- 请求处理参数 和 响应数据处理
1、请求处理参数

1.1 请求参数 @RequestParam

1.1.1 不使用 @RequestParam 注解

请求参数处理,不使用参数注解
1.如果请求参数名和请求处理的形参名一致,springMvc 框架会自动将你的请求参数名对应的参数值绑定到请求方法的形参中方法内就可以直接使用,不用手动获取;
2.如果你的请求没有携带参数,不会报错,只不过,请求处理方法的形参值都是null或其他值,如果请求处理方法形参是一个实体参数,原理和单个类型参数一致(只要请求参数名和实体名一致也可以自动绑定);
测试不使用 @RequestParam 注解
  1. @RequestMapping("/testSpringMvcNoRequestParam")
  2. public String testSpringMvcNoRequestParam( String userId,String userName){
  3.     System.out.println(String.format("------ 请求参数:uid :%s ,uname:%s------",userId,userName));
  4.     return "success";
  5. }
复制代码
测试 请求不带参数

测试 请求带参数

1.1.3 使用 @RequestParam 注解

@RequestParam 只能写在请求方法的形参上
required = false 设置参数不是必传
defaultValue 默认值
测试
  1. @RequestMapping("/testSpringMvcRequestParam")
  2. public String testSpringMvcRequestParam(@RequestParam("uid") String userId,
  3.                                         @RequestParam(value = "uname",required = false,defaultValue = "KH96-mvc") String userName,
  4.                                         @RequestParam String userPwd){
  5.     System.out.println(String.format("------ 请求参数:uid :%s ,uname:%s,uPwd:%s------",userId,userName,userPwd));
  6.     return "success";
  7. }
复制代码
测试结果

1.2 请求头参数 @RequestHeader

请求头参数@RequestHeader:
测试
  1. @RequestMapping("/testSpringMvcNoRequestHeader")
  2. public String testSpringMvcNoRequestHeader(@RequestHeader(value = "token",required = false,defaultValue = "KH96_mvc") String token){
  3.     System.out.println(String.format("------ 请求头参数:token :%s ------",token));
  4.     return "success";
  5. }
复制代码
测试结果

1.3 Cookie 参数 @CookieValue

@CookieValue:
cookie中获取参数,根据别名或者参数形参名,将请求头对应参数值绑定到请求处理方法的形参中,直接使用,用法跟@RequestParam,@RequestHeader类似,也可以指定是否必传默认值
测试
  1. @RequestMapping("/testSpringMvcCookieValue")
  2. public String testSpringMvcCookieValue(@CookieValue("JSESSIONID") String sessionId){
  3.     System.out.println(String.format("------ 请求cookie参数:JSESSIONID :%s ------",sessionId));
  4.     return "success";
  5. }
复制代码
测试结果:

1.4 实体参数

请求参数处理 实体参数
自动将请求参数自动将实体的属性名与形参绑定,原理和单个参数类型一致;
测试
  1. @RequestMapping("/testSpringMvcBeanParam")
  2. public String testSpringMvcBeanParam(UserVO userVO){
  3.     System.out.println(String.format("------ 请求实体参数:userVO :%s ------",userVO));
  4.     return "success";
  5. }
复制代码
测试结果

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

用法和javaWeb截断学习的用法完全一致;
  1. @RequestMapping("testSpringMvcServletAPI")
  2. public  void testSpringMvcServletAIP(HttpServletRequest request, HttpServletResponse response,HttpSession session) throws IOException, ServletException {
  3.     //获取请求方式
  4.     System.out.println(String.format("------ 请求方式:%s ------",request.getMethod()));
  5.     //获取请求参数
  6.     System.out.println(String.format("------ 请求参数:%s ------",request.getParameter("userTel")));
  7.     //手动转发
  8.     // request.getRequestDispatcher("/WEB-INF/views/success.jsp").forward(request,response);
  9.     //获取session对象
  10.     //手动添加参数
  11.     HttpSession sessionHad = request.getSession();
  12.     //sessionHad.setAttribute("userTel",request.getParameter("userTel"));
  13.     //方式2;直接将HttpSession对象声明在请求处理方法的形参中,可以自动获取 session
  14.     //重定向到
  15.     //        response.sendRedirect("http://www.baidu.com");
  16. }
复制代码
2、响应数据处理

2.1 ModelAndView

ModelAndView 的数据模型放在request的作用域中视图模型,放在request.getRequestDispatcher(前缀+视图名字+后缀);
结论:SpringMVC框架的前端核心控制器,会自动将返回的ModelAndView对象中的数据模型,添加到request作用域使用内部转发方式,转发到目标视图;
测试
  1. @RequestMapping("/testSpringMvcModelAndView")
  2. public ModelAndView testSpringMvcModelAndView(String userEmail){
  3.     //创建一个 ModelAndView 对象
  4.     ModelAndView mav = new ModelAndView();
  5.     //添加模型数据
  6.     mav.addObject("uemail",userEmail);
  7.     //可以添加多个模型数据,内部使用ModelMap集合存放的
  8.     mav.addObject("uage",18);
  9.     //设置目标视图
  10.     mav.setViewName("ok");
  11.     //返回  ModelAndView 对象
  12.     return  mav;
  13. }
复制代码
测试结果

2.2  Map

要求:使用map返回模型数据,必须将map声明在请求处理方法的形参中,定义在方法的内部是无效的;
总结:
测试
  1. @RequestMapping("/testSpringMvcMap")
  2. public  String testSpringMvcMap(String userEmail, Map<String,Object> map){
  3.     //输出map的目标类型
  4.     System.out.println(map.getClass().getName());
  5.     //org.springframework.validation.support.BindingAwareModelMap
  6.     //添加模型数据
  7.     map.put("uemail",userEmail);
  8.     //返回目标视图名称
  9.     return "ok";
  10. }
复制代码
测试结果

2.3  Model

Model,可以添加模型数据;
必须将 Model 声明在请求处理方法的形参中,定义在方法的内部是无效的,用法跟Map 一致;
测试
  1. @RequestMapping("/testSpringMvcModel")
  2. public  String testSpringMvcModel(String userEmail, Model model){
  3.     //添加模型数据
  4.     model.addAttribute("uemail",userEmail);
  5.     //返回目标视图名称
  6.     return "ok";
  7. }
复制代码
测试结果

2.4  forward: 转发 和 redirect: 重定向

2.4.1forward 转发

只需要在返回的视图名称前,增加一个前缀:forward 即可,直接转发到目标资源;
当前请求处理方法中的模型对象可以带走;
  1. @RequestMapping("/testSpringMvcForward")
  2. public String testSpringMvcForward(Map<String,Object> map){
  3.     //转发页面跳转
  4.     //return "forward:/forward.jsp";
  5.     //转发到其他请求中
  6.     //return "forward:/testSpringMvcModel?userEmail=123@qq.com";
  7.     //自定义转发,携带模型数据
  8.     map.put("uaddr","nj_wd_kh96");
  9.     return "forward:/testSpringMvcModel?userEmail=123@qq.com";
  10. }
复制代码
2.4.2 redirect 重定向

只需要在返回的视图名称前,增加一个前缀:redirect 即可,不做视图解析器,直接重定向
注意,重定向,当前请求处理方法中的模型对象不能带走
  1. @RequestMapping("/testSpringMvcRedirect")
  2. public String testSpringMvcRedirect(){
  3.     //重定向页面跳转
  4.     //return "redirect:/redirect.jsp";
  5.     //重定向 可以重定向到 其他请求中
  6.     return "redirect:/testSpringMvcModel?userEmail=123@qq.com";
  7. }
复制代码
2.5 @ResponseBody

返回JSON数据;
2.5.1 jar包
  1. <dependency>
  2.     <groupId>com.fasterxml.jackson.core</groupId>
  3.     <artifactId>jackson-core</artifactId>
  4.     <version>2.8.4</version>
  5. </dependency>
  6. <dependency>
  7.     <groupId>com.fasterxml.jackson.core</groupId>
  8.     <artifactId>jackson-databind</artifactId>
  9.     <version>2.8.4</version>
  10. </dependency>
  11. <dependency>
  12.     <groupId>com.fasterxml.jackson.core</groupId>
  13.     <artifactId>jackson-annotations</artifactId>
  14.     <version>2.8.4</version>
  15. </dependency>
复制代码
2.5.2 配置

[code]




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4