我们在编写接口时会传入复杂参数,如Map、Model等,这种类似的参数会有相应的参数解析器进行解析,并且最后会将解析出的值放到request域中,下面我们一起来探析一下其中的原理
复杂参数:
- Map<String, Object> map
- Model model
- HttpServletRequest request
- HttpServletResponse response
以上复杂参数所携带的数据均可被放在 request 请求域中,其中 Map 与 Model 类型处理方法一致。(本文只介绍使用)
使用方法:
1. controller 类完整代码:
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;
@Controller
public class RequestController {
@GetMapping("/params")
public String testParam(Map<String, Object> map,
Model model,
HttpServletRequest request,
HttpServletResponse response){
map.put("map", "helloMap");
model.addAttribute("model", "helloModel");
request.setAttribute("message", "helloMessage");
Cookie cookie = new Cookie("c1", "v1");
cookie.setDomain("localhost");
response.addCookie(cookie);
return "forward:/success"; // 转发到 /SUCCESS请求
}
@ResponseBody
@GetMapping("/success")
public Map success(HttpServletRequest request){
Map<String, Object> map = new HashMap<>();
Object hello = request.getAttribute("map");
Object model = request.getAttribute("model");
Object message = request.getAttribute("message");
map.put("hello", hello);
map.put("medol", model);
map.put("message", message);
return map;
}
}2. 具体解释:
- map、model 里面的数据会被放在request的请求域, 通过request.getAttribute(“数据名”) 取得。
- HttpServletRequest 的数据也会被放在request的请求域, 通过request.getAttribute(“请求名”) 取得。
注意:使用return "forward:/success"转发机制,Controller的注释为 @Controller
3. 执行结果:
通过request取得 Map,Medol,HttpServletRequest 的值如下图所示:

设置cookies成功:

尾注:我是看尚硅谷老师的课学习的SpringBoot,30分钟的课25分钟debug看源码(新手不友好),所以开始时真的很困难,可是只要跑起来就有风不是嘛,哼,死磕到底!
到此这篇关于SpringBoot复杂参数应用详细讲解的文章就介绍到这了,更多相关SpringBoot复杂参数内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:SpringBoot复杂参数应用详细讲解
基础教程推荐
- Spring Cloud Config分布式配置中心使用介绍详解 2023-05-07
- Java Web开发中过滤器和监听器使用详解 2023-06-30
- 关于Java双大括号{{}}的具体使用 2023-03-15
- RocketMQ Push 消费模型示例详解 2023-05-24
- 一文带你搞懂Java中方法重写与方法重载的区别 2023-07-14
- java知识点7——面向过程和面向对象、面向对象的内存分析、构造方法 2023-09-01
- Java多线程学习笔记之三内存屏障与Java内存模型 2023-09-01
- MyBatis-Plus自定义通用的方法实现 2023-07-15
- Java List的get方法 2023-10-08
- Java实现插入排序算法可视化的示例代码 2023-04-23
