Spring Boot获取前端页面参数的几种方式总结

Spring Boot可通过注解轻松获取前端页面参数并传至后台数据库。本文总结了六种获取方式,包括指定前端url请求参数名称与方法名一致、通过HttpServletRequest获取、创建JavaBean对象封装参数、使用PathVariable注解绑定、RequestParam注解获取以及ModelAttribute方式注入,可按需选择。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文地址:http://blog.youkuaiyun.com/a532672728/article/details/78057218

 

Spring Boot的一个好处就是通过注解可以轻松获取前端页面的参数,之后可以将参数经过一系列处理传送到后台数据库,前段时间正好用到,但是忘得差不多了,获得的方式有很多种,这种东西不写下来一段时间不用就忘得差不多了,感觉记性越来越差了呢,这里稍微总结一下,大致分为以下几种: 
   
  1.指定前端url请求参数名称与方法名一致,见下图,这种方式简单来说就是url请求格式中的参数需要与方法的参数名称对应上,举个例子,这么一个url请求http://localhost:8080/0919/test1?name=xxx&pwd=yyy,在指定的控制器类上加上Controller注解,同时指定RequestMapping注解即可,当请求路径参数与方法参数匹配上时会自动注入 
  这里写图片描述

  启动主程序,访问浏览器出现下图,表明注入参数成功,这种方式一般是get请求 
  这里写图片描述  

   
  2.第二种方式是通过HttpServletRequest来获取前端页面参数,代码见下图 ,简单来说就是通过调用request的getParameter方法来获取参数,比如访问路径类似这样http://localhost:8080/0919/test2?firstName=zhang&lastName=san 
  这里写图片描述 
   
  启动主程序,访问浏览器出现下图,表明注入参数成功,这种方式也可以获取表单参数,一般get和post请求都可以

  这里写图片描述

  3.第三种方式是通过创建一个JavaBean对象来封装表单参数或者是请求url路径中的参数,具体代码见下图 
  这里写图片描述

  对应的JavaBean对象是下面这个 
  这里写图片描述 
   
  简单来说就是将表单参数作为一个JavaBean类的属性,通过设置方法参数为一个JavaBean对象,之后在方法中通过调用对象的get方法来获取表单传过来的参数,比如访问路径是这个http://localhost:8080/0919/test3?firstName=zhang&lastName=san 启动主程序,在浏览器访问见下图,表明注入参数成功,这种方式如果请求的表单参数很多可以考虑使用这种方式 
  这里写图片描述

  4.第四种方式是通过PathVariable注解来绑定请求路径的参数,参考代码见下 
  这里写图片描述 
   
  这种情况简单来说就是url中采用动态绑定的形式表示,之后在方法中指定的参数通过PathVariable来将请求的url中的参数绑定到方法参数,这里在不指定PathVariable注解的具体值时按照请求路径中的动态变量顺序与注解顺序一致即可注入 ,如果想指定注入,那么指定PathVariable注解的值与动态变量的名一致即可特定注入。比如请求路径是这个http://localhost:8080/0919/test4/111/222

  启动主程序,在浏览器访问,出现下图表明注入参数成功 
   
  这里写图片描述

  5.第五种方式是通过RequestParam注解来获取,具体代码见下 
  这里写图片描述

  这种方式是通过url路径的形式将请求路径上的参数绑定到方法的参数上,简单来说就是实参值赋给相应的形参,与上面那种方式的区别是前者是动态url模板注入,这里是个普通的url请求注入·,比如访问路径是这个http://localhost:8080/0919/test5?aaa=111&bbb=4444

  启动主程序,访问该请求,浏览器出现下面这个表明注入参数成功,这里可以通过指定RequestParam的value值来指定url请求路径参数指定注入到哪个具体方法参数,不过一般两者名字一致比较方便 
  这里写图片描述

  6.第六种方式是通过ModelAttribute方式来注入参数,具体代码见下 
  这里写图片描述

  这种方式一般是通过在页面展示,所以这里创建两个页面做测试test2.jsp和test3.jsp进行测试 
  这里写图片描述

这里写图片描述

  简单来说就是通过ModelAttribute注解将请求参数封装到指定的JavaBean对象,同时通过value值将这个接受了表单参数的对象赋给value,这里就是将s赋给了一个变量名为kkk的存在,之后就可以在jsp页面通过这个变量名使用el表达式来获取从表单传过来的参数,这里测试路径是http://localhost:8080/0919/kkk,访问在浏览器进行测试,见下图 
   这里写图片描述

   点击提交,出现下图,表明表单参数成功被后台接受并在前台页面输出,这种方式一般是需要在前台页面输出的时候使用 
   这里写图片描述  

    
   总的来说Spring Boot获取前端页面参数的方式大致就上面这几种,可以根据自己的实际情况来选择其中的任意一种方式,个人一般推荐前三种方式,当然具体选哪种还是因人而异

<think>首先,用户的问题是关于在Spring Boot应用中获取完整的URL路径。我需要参考提供的引用内容,并确保我的回答结构清晰、真实可靠。 参考引用: - 引用[1]:展示了Spring Boot应用启动类的基本结构。 - 引用[2]:讨论了Spring Boot获取前端页面参数几种方式,特别是通过URL参数。 - 引用[3]:提到了Spring Boot的配置文件设置,如模板路径。 用户的具体问题是:“我想在Spring Boot应用中获取完整的URL路径的方法 请问Spring Boot 获取完整 URL 路径的几种方式”。所以,我需要提供在Spring Boot获取完整URL(包括协议、主机名、端口、路径、查询参数等)的方法。 关键点: - 完整URL包括:协议(如http/https)、服务器名称、端口、请求URI、查询字符串等。 - 在Spring Boot中,通常可以在控制器方法中获取HttpServletRequest对象来访问这些信息。 基于我的知识: 1. 使用HttpServletRequest:在控制器方法中注入HttpServletRequest,然后使用其方法来构建完整URL。 2. 使用ServletUriComponentsBuilder:Spring MVC提供了UriComponentsBuilder来帮助构建URI。 3. 使用@RequestHeader注解:但主要用于头信息,不是直接获取URL。 4. 在配置文件中设置:但引用[3]是关于模板路径,不是直接相关。 从引用[2]中,它提到了获取URL参数方式,这涉及到请求URL。所以,我可以扩展这个思路。 回答结构: 1. **介绍**:简要解释什么是完整URL,并概述方法。 2. **方法一**:使用HttpServletRequest。 3. **方法二**:使用ServletUriComponentsBuilder。 4. **方法三**:其他方式(如使用RequestContextHolder)。 5. **总结**:建议最佳实践或常见场景。 6. **相关问题**:生成相关问题,如系统指令要求。 确保格式: - 所有行内数学表达式用$...$,但这里可能不涉及数学,所以可能不需要。 - 独立公式用$$...$$,但同样,不相关。 - 使用中文回答。 - 在引用段落末尾添加引用标识。引用来自提供的引用内容,但用户的问题是基于这些引用,所以我应该自然地引用它们。 引用标识: - 引用[1]是关于启动类,可能不直接相关。 - 引用[2]是关于获取参数,可以引用。 - 引用[3]是关于配置文件,可能不直接相关。 所以,在回答中,当提到获取参数时,可以引用引用[2]。 生成相关问题: - 根据系统指令,在回答末尾添加相关问题。 完整回答大纲: 1. 介绍:在Spring Boot获取完整URL路径的常见方法是通过HttpServletRequest对象,因为它封装了HTTP请求的所有信息。 2. 方法一:注入HttpServletRequest。 - 示例代码。 - 解释如何使用request.getRequestURL()和request.getQueryString()来构建完整URL。 3. 方法二:使用ServletUriComponentsBuilder。 - 示例代码。 - 解释如何从当前请求构建URL。 4. 方法三:使用RequestContextHolder(在非控制器上下文中)。 - 简要说明。 5. 总结:推荐方法。 6. 相关问题:生成3-4个相关问题。 代码示例:使用Java代码块,类似于示例中的Python代码块。 确保真实可靠:基于标准Spring BootSpring MVC知识。 最终回答: - 以中文撰写。 - 结构清晰。</think>### Spring Boot 获取完整 URL 路径的几种方式Spring Boot 应用中,获取完整的 URL 路径(包括协议、主机名、端口、请求 URI 和查询参数)是一个常见需求,尤其在处理前端请求或日志记录时。完整 URL 的格式通常为:`协议://主机名:端口/路径?查询参数`。Spring Boot 基于 Spring MVC 框架,提供了多种方式来实现这一目标。以下我将逐步介绍几种可靠的方法,确保代码简洁且易于集成。所有示例均基于 Spring Boot 的控制器层实现。 #### 方法一:使用 `HttpServletRequest` 对象 这是最直接且常用的方式。`HttpServletRequest` 对象封装了 HTTP 请求的所有细节,您可以通过注入该对象到控制器方法中来获取完整 URL。 **步骤:** 1. 在控制器方法中注入 `HttpServletRequest`。 2. 使用 `request.getRequestURL()` 获取基础 URL(不包括查询参数)。 3. 结合 `request.getQueryString()` 添加查询参数(如果有)。 4. 构建完整 URL。 **示例代码:** ```java import javax.servlet.http.HttpServletRequest; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class UrlController { @GetMapping("/getUrl") public String getFullUrl(HttpServletRequest request) { // 获取基础 URL(如 http://localhost:8080/path) StringBuffer url = request.getRequestURL(); // 获取查询字符串(如 ?name=value) String queryString = request.getQueryString(); // 构建完整 URL String fullUrl = queryString == null ? url.toString() : url.append("?").append(queryString).toString(); return "完整URL: " + fullUrl; } } ``` **说明:** - 当访问 `http://localhost:8080/getUrl?param=123` 时,该方法返回 `完整URL: http://localhost:8080/getUrl?param=123`。 - 此方法简单高效,适用于大多数控制器场景。引用[2]中提到通过 URL 参数获取值的方式类似,但这里扩展为获取整个 URL[^2]。 #### 方法二:使用 `ServletUriComponentsBuilder` 工具类 Spring MVC 提供了 `ServletUriComponentsBuilder` 工具类,它能从当前请求上下文自动构建完整 URL,无需手动处理字符串拼接。这种方式更面向对象且可读性强。 **步骤:** 1. 使用 `ServletUriComponentsBuilder.fromCurrentRequest()` 获取当前请求的构建器。 2. 调用 `build()` 方法生成 `UriComponents` 对象。 3. 转换为完整 URL 字符串。 **示例代码:** ```java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.support.ServletUriComponentsBuilder; @RestController public class UrlController { @GetMapping("/getUrl") public String getFullUrl() { // 从当前请求构建完整 URL String fullUrl = ServletUriComponentsBuilder.fromCurrentRequest().build().toUriString(); return "完整URL: " + fullUrl; } } ``` **说明:** - 访问 `http://localhost:8080/getUrl?id=456` 时,返回 `完整URL: http://localhost:8080/getUrl?id=456`。 - 此方法自动处理协议、主机和查询参数,代码更简洁。适用于 RESTful 接口。 #### 方法三:使用 `RequestContextHolder` 在非控制器上下文中 如果您需要在非控制器类(如 Service 层或过滤器)中获取完整 URL,可以使用 `RequestContextHolder` 获取当前请求的 `ServletRequestAttributes`。 **步骤:** 1. 通过 `RequestContextHolder` 获取当前请求属性。 2. 从中提取 `HttpServletRequest`。 3. 使用方法一的逻辑构建 URL。 **示例代码:** ```java import javax.servlet.http.HttpServletRequest; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; public class UrlService { public String getFullUrl() { // 获取当前请求属性 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); if (attributes == null) { return "无活动请求"; } HttpServletRequest request = attributes.getRequest(); StringBuffer url = request.getRequestURL(); String queryString = request.getQueryString(); String fullUrl = queryString == null ? url.toString() : url.append("?").append(queryString).toString(); return "完整URL: " + fullUrl; } } ``` **说明:** - 在控制器中调用此 Service 方法即可。例如: ```java @RestController public class UrlController { @Autowired private UrlService urlService; @GetMapping("/getUrl") public String getFullUrl() { return urlService.getFullUrl(); } } ``` - 这种方式灵活,适用于异步或后台任务,但需确保在请求线程中调用。 #### 最佳实践总结 - **推荐方法**:对于控制器层,优先使用方法二(`ServletUriComponentsBuilder`),代码简洁且安全;对于非控制器场景,使用方法三。 - **注意事项**: - 确保 Spring Boot 应用已启用 Web 模块(依赖 `spring-boot-starter-web`)。 - 完整 URL 可能包含敏感信息(如查询参数),在日志或输出中需注意安全过滤。 - 引用[1]中的启动类结构是基础,确保您的应用正确初始化[^1];引用[3]提到的配置文件可用于自定义路径处理,但非直接获取 URL[^3]。 通过以上方法,您可以轻松在 Spring Boot获取完整 URL 路径,提升请求处理的灵活性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值