ToB企服应用市场:ToB评测及商务社交产业平台
标题:
SpringMvc(二)- 请求处理参数 和 响应数据处理
[打印本页]
作者:
大连全瓷种植牙齿制作中心
时间:
2022-9-16 17:25
标题:
SpringMvc(二)- 请求处理参数 和 响应数据处理
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");
}
复制代码
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包
,否者报错,且必须要增加注解扫描 才可以;
位置:可以写在请求处理方法上或者类上,写在
类上
,就是对当前类中
所有请求处理方法生效
,写在方法上,只有对
当前方法生效
;
2.5.1 jar包
<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>
复制代码
2.5.2 配置
[code]
欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/)
Powered by Discuz! X3.4