SpringBoot复杂参数应用详细讲解

 更新时间:2022年09月30日 08:33:33   作者:刘婉晴  
我们在编写接口时会传入复杂参数,如Map、Model等,这种类似的参数会有相应的参数解析器进行解析,并且最后会将解析出的值放到request域中,下面我们一起来探析一下其中的原理

复杂参数:

  1. Map<String, Object> map
  2. Model model
  3. HttpServletRequest request
  4. 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. 具体解释:

  1. map、model 里面的数据会被放在request的请求域, 通过request.getAttribute(“数据名”) 取得。
  2. HttpServletRequest 的数据也会被放在request的请求域, 通过request.getAttribute(“请求名”) 取得。

注意:使用return "forward:/success"转发机制,Controller的注释为 @Controller

3. 执行结果:

通过request取得 Map,Medol,HttpServletRequest 的值如下图所示:

设置cookies成功:

尾注:我是看尚硅谷老师的课学习的SpringBoot,30分钟的课25分钟debug看源码(新手不友好),所以开始时真的很困难,可是只要跑起来就有风不是嘛,哼,死磕到底!

到此这篇关于SpringBoot复杂参数应用详细讲解的文章就介绍到这了,更多相关SpringBoot复杂参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 分析ZooKeeper分布式锁的实现

    分析ZooKeeper分布式锁的实现

    在分布式的情况下,sychornized 和 Lock 已经不能满足我们的要求了,那么就需要使用第三方的锁了,这里我们就使用 ZooKeeper 来实现一个分布式锁
    2021-06-06
  • Java 根据某个 key 加锁的实现方式

    Java 根据某个 key 加锁的实现方式

    日常开发中,有时候需要根据某个 key 加锁,确保多线程情况下,对该 key 的加锁和解锁之间的代码串行执行,这篇文章主要介绍了Java 根据某个 key 加锁的实现方式,需要的朋友可以参考下
    2023-03-03
  • Java中的日期时间类实例详解(Date、Calendar、DateFormat)

    Java中的日期时间类实例详解(Date、Calendar、DateFormat)

    在JDK1.0中,Date类是唯一的一个代表时间的类,但是由于Date类不便于实现国际化,所以从JDK1.1版本开始,推荐使用Calendar类进行时间和日期处理,这篇文章主要介绍了Java中的日期时间类详解(Date、Calendar、DateFormat),需要的朋友可以参考下
    2023-11-11
  • MyBatis批量插入的五种方式

    MyBatis批量插入的五种方式

    这篇文章主要介绍了MyBatis批量插入的五种方式,每种方式结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-11-11
  • Java利用Sping框架编写RPC远程过程调用服务的教程

    Java利用Sping框架编写RPC远程过程调用服务的教程

    这篇文章主要介绍了Java利用Sping框架编写RPC远程过程调用服务的教程,包括项目管理工具Maven的搭配使用方法,需要的朋友可以参考下
    2016-06-06
  • Mybatis查询返回两个或多个参数问题

    Mybatis查询返回两个或多个参数问题

    这篇文章主要介绍了Mybatis查询返回两个或多个参数问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06
  • Java实现设计模式之责任链模式

    Java实现设计模式之责任链模式

    责任链模式是一种行为设计模式,允许你将请求沿着处理链发送,然后处理者都可对其进行处理,完成后可以再将其传递给下一个处理者。下面将会举例说明什么是责任链模式,责任链模式该如何使用
    2022-08-08
  • Java中的线程池ThreadPoolExecutor细致讲解

    Java中的线程池ThreadPoolExecutor细致讲解

    这篇文章主要介绍了Java中的线程池ThreadPoolExecutor细致讲解,线程池是一种基于池化思想管理线程的工具,经常出现在多线程服务器中,如MySQL,线程过多会带来额外的开销,其中包括创建销毁线程的开销、调度线程的开销等等,需要的朋友可以参考下
    2023-11-11
  • Java中@InitBinder注解的使用原理详解

    Java中@InitBinder注解的使用原理详解

    这篇文章主要介绍了Java中@InitBinder注解的使用原理详解,在Java中,@InitBinder 注解是用于标记一个方法,该方法将在控制器(Controller)处理请求之前被调用,用于进行一些数据绑定和预处理的操作,需要的朋友可以参考下
    2023-10-10
  • Spring Cloud Alibaba 之 Nacos教程详解

    Spring Cloud Alibaba 之 Nacos教程详解

    Nacos是阿里的一个开源产品,它是针对微服务架构中的服务发现、配置管理、服务治理的综合性解决方案。这篇文章主要介绍了Spring Cloud Alibaba 之 Nacos的相关知识,需要的朋友可以参考下
    2020-11-11

最新评论