(七)Spring Boot Controller的请求参数获取

本文介绍了7种在Controller层获取HTTP请求参数的方法,包括直接参数匹配、使用HttpServletRequest、实体对象传递等,适用于不同场景。

Controller层获取请求参数的方式介绍

1、Controller方法的参数名称和请求的参数名称相对应

适用场景

只适用get请求

实例

请求例子:http://127.0.0.1:8888/study/param/add_string?name=小米&age=10

@RequestMapping(path = "/add_string", method = RequestMethod.GET)
public User add_String(String name,Integer age)
{
    User user = new User();
    user.setName(name);
    user.setAge(age);
    return user;
}

2、使用HttpServletRequest 对象获取参数

适用场景

适用get请求和post请求

实例

请求例子:http://127.0.0.1:8888/study/param/add_servlet?name=小红&age=11 在post的body中加入phone

@RequestMapping(path = "/add_servlet")
public User add_servlet(HttpServletRequest request)
{
    User user = new User();
    user.setName(request.getParameter("name"));
    user.setAge(Integer.parseInt(request.getParameter("age")));
    user.setPhone(request.getParameter("phone"));
    return user;
}

在这里插入图片描述

3、通过建立一个实体对象来获取参数

适用场景

适用get请求和post请求

实例

请求例子:http://127.0.0.1:8888/study/param/add_entity?name=小红&age=11 在post的body中加入phone

    @RequestMapping(path = "/add_entity")
    public User add_entity(User user)
    {
        System.out.println(user.toString());
        return user;
    }

4、通过 PathVariable 从请求连接中获取参数

适用场景

适用get请求

实例

请求例子:http://127.0.0.1:8888/study/param/add_path_variable/小红/11

@RequestMapping(path = "/add_path_variable/{name}/{age}",method = RequestMethod.GET)
public User add_path_variable(@PathVariable String name,@PathVariable String age)
{
    User user = new User();
    user.setName(name);
    user.setAge(Integer.parseInt(age));
    return user;
}

在这里插入图片描述

5、通过 ModelAttribute 获取传进的参数

适用场景

适用post请求

实例

请求例子:

@RequestMapping(path = "/add_model_attribute",method = RequestMethod.POST)
public User add_model_attribute(@ModelAttribute("user") User user)
{
    System.out.println(user.toString());
    return user;
}

在这里插入图片描述


6、用注解@RequestParam绑定请求参数到方法入参

@RequestParam注解:将请求参数区域的数据映射到控制层方法的参数上
name:参数 名称
required:是否必须
defaultValue:默认值

适用场景

适用get请求和post请求参数是key-value形式时的数据

实例

请求例子:http://127.0.0.1:8888/study/param/add_request_param?as_name=小红&as_age=11

@RequestMapping(path = "/add_request_param")
public User add_request_param(@RequestParam(name="as_name",required = true,defaultValue = "默认名称") String name,@RequestParam(name="as_age",required = true) String age)
{
    User user = new User();
    user.setName(name);
    user.setAge(Integer.parseInt(age));
    return user;
}

在这里插入图片描述
在这里插入图片描述

7、用注解@RequestBody绑定请求参数到方法入参

@RequestBody主要用来接收前端传递给后端的json字符串中的数据的(请求体中的数据的)

适用场景

适用post请求

实例

请求例子:http://127.0.0.1:8888/study/param/add_request_body

@RequestMapping(path = "/add_request_body",method = RequestMethod.POST)
public User add_request_body(@RequestBody User user)
{
    System.out.println(user.toString());
    return user;
}

在这里插入图片描述
在这里插入图片描述



项目git地址

spring-boot2-http

<think>好的,我需要帮用户找到在Spring BootController获取HttpServletRequest的示例代码。根据用户提供的引用内容,特别是引用[1],里面已经有一个具体的示例。让我仔细看一下引用[1]的内容。 引用[1]中的代码展示了一个HelloController类,其中有一个test1方法,参数中直接使用了HttpServletRequest request。这说明在Spring Boot中,只需在Controller的方法参数里声明HttpServletRequest即可自动注入。用户可能需要知道这种方式是否有效,以及是否需要额外的配置。 接下来,我需要确认这种方式是否标准做法。根据Spring MVC的文档,确实支持在Controller方法参数中注入HttpServletRequest,这是通过HandlerMethodArgumentResolver实现的。所以这个方法不需要其他配置,直接使用即可。 用户可能还关心其他获取方式,比如通过自动注入或上下文持有器,但根据提供的引用,直接参数注入是最简单的。因此,我应该重点展示引用[1]的示例,并说明其工作原理。 另外,需要检查是否有其他引用相关内容。引用[2]和[3]主要涉及应用启动类和DAO层,与当前问题无关,可以忽略。因此,回答应集中在引用[1]的示例上,并确认代码的正确性。 最后,确保回答结构清晰,分步骤说明,并附上代码示例。同时,生成相关问题时要围绕HttpServletRequest的使用和Spring Boot Controller的其他常见操作。</think>### Spring Boot Controller 获取 HttpServletRequest 的示例 在 Spring Boot 中,Controller 层可以通过以下两种常见方式获取 `HttpServletRequest` 对象: --- #### **方法 1:直接作为方法参数注入(推荐)** 在 Controller 方法参数中直接声明 `HttpServletRequest` 类型,Spring 会自动注入当前请求的实例。这是最简单且最常用的方式,代码示例如下: ```java package com.example.controller; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; @RestController @RequestMapping public class HelloController { @GetMapping("/test1") public String test1(HttpServletRequest request) { // 使用 request 对象进行操作,例如获取请求头、参数等 System.out.println("请求方法类型: " + request.getMethod()); return "Request 信息已处理"; } } ``` **说明**: - 通过 `HttpServletRequest request` 参数声明,Spring 会在请求到达时自动注入。 - 可以直接调用 `request` 的方法,如 `getMethod()`、`getHeader()`、`getParameter()` 等[^1]。 --- #### **方法 2:通过自动注入(适用于类内多方法复用)** 如果需要在 Controller 的多个方法中使用 `HttpServletRequest`,可以通过 `@Autowired` 注解自动注入: ```java @RestController @RequestMapping public class HelloController { @Autowired private HttpServletRequest request; // 自动注入 @GetMapping("/test2") public String test2() { String userAgent = request.getHeader("User-Agent"); return "User-Agent: " + userAgent; } } ``` **注意**:此方式需要确保当前线程处于请求上下文中,否则可能引发空指针异常。 --- #### **方法 3:通过上下文持有器(灵活但需谨慎)** 使用 `RequestContextHolder` 静态方法获取当前请求对象: ```java import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; @GetMapping("/test3") public String test3() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); return "请求路径: " + request.getRequestURI(); } ``` **适用场景**:非 Controller 层(如 Service 或工具类)中获取请求对象,但需注意线程安全问题[^1]。 --- ### **代码验证与测试** 1. 启动 Spring Boot 应用(引用[2]中的主类 `DemoApplication.java`)。 2. 访问 `http://localhost:8080/test1`,观察控制台输出的请求信息。 3. 使用 Postman 或浏览器调试工具检查返回值是否符合预期。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值