Controller层接收前端页面传参种类及实现

您所在的位置:网站首页 e52430l参数 Controller层接收前端页面传参种类及实现

Controller层接收前端页面传参种类及实现

2023-12-25 11:47| 来源: 网络整理| 查看: 265

目录 一、简介二、接收参数方式1.无注解的接收2.请求路径带参数2.1 @RequestParam2.2 @PathVariable 3.@RequsetBody 三、总结

一、简介

在使用Controller层处理前端请求时,接收前端页面参数是非常重要的一步,页面的参数该如何接收,常常会让人混淆,比如我~ 本文也是我的学习笔记,希望可以帮助大家更好地理解和掌握这些方法,以Restful风格为例,参考了一些CSDN大佬的文章,整理了一下常见的接收传参的方法。

IDE:idea、JDK:1.8

二、接收参数方式

准备环境:Book.class,BookController.class

实体类Book.class,里面的属性有以下:

@Data public class Book { private Long id; private String name; private float price; }

控制器类BookController.class

/** * 为了方便查看传参是否成功,我们将接收到的参数用log,info()打印在控制台, 该方法需要在控制器类上方添加@Slf4j注解 */ @Slf4j @RestController @RequestMapping("/book") public class BookController { } 1.无注解的接收

注意:无注解的接收只能获取Get方式的请求的参数,如果用别的请求就会报错,并且接收不到页面传递过来的参数

@Slf4j @RestController @RequestMapping("/book") public class BookController { /** * 无注解的接收,单个参数接收的方式 * http://localhost:8080/book/text1?id=1314 * @param id */ @GetMapping("/text1") public void text1(Long id) { log.info(id.toString()); // 1314 } /** * 无注解的接收,实体类接收的方式,会自动封装进book中,更加通用,推荐 * http://localhost:8080/book/text2?id=1314 * @param book */ @GetMapping("/text2") public void text2(Book book) { log.info(book.toString()); // Book(id=1314, name=null, price=0.0) } } 2.请求路径带参数 2.1 @RequestParam

@RequestParam将请求参数绑定到你控制器的方法参数上,这样就能够正确地获取前台传递的参数值,并进行后续的业务处理。使用@RequestParam注解可以有效避免参数传递不匹配的问题,提高系统的稳定性和安全性。 @RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)

/* value:参数名 required:是否包含该参数,默认为true,表示该请求路径中必须包含该参数,如果不包含就报错。 defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值 */ @Slf4j @RestController @RequestMapping("/book") public class BookController { /** * @RequestParam * http://localhost:8080/book/test3?name=《编译原理》 * url参数中的name必须要和@RequestParam("name")一致 * @param name */ @DeleteMapping("/test3") public void test3(@RequestParam("name")String name){ log.info(name); } /** * @RequestParam * http://localhost:8080/book/test4 * url中没有name参数不会报错,因为required=false、有参数就显示出来 * @param name */ @DeleteMapping("/test4") public void test4(@RequestParam(value="name",required=false)String name){ log.info(name); // null } /** * @RequestParam * http://localhost:8080/book/test5?name=《编译原理》 显示为《编译原理》 * http://localhost:8080/book/test5?name 显示为《无名之书》 * defaultValue:默认参数值,如果设置了该值,required=true将失效,自动为false,如果没有传该参数,就使用默认值 * @param name */ @DeleteMapping("/test5") public void test5(@RequestParam(value="name",required=true,defaultValue="《无名之书》")String name){ log.info(name); // 第一个url:《编译原理》,第二个url:《无名之书》 } /** * @RequestParam * http://localhost:8080/book/test6?ids=23&ids=98&ids=64 * @RequestParam中的参数也可以省略,参数名默认就是和形参名称一致 * @param ids */ @DeleteMapping("/test6") public void test6(@RequestParam List ids){ log.info(ids.toString()); // [23, 98, 64] } }

注意: @RequestParam注解和HttpServletRequest的getParameter()方法的作用相同,都是用于从请求中获取参数的值。但是它们的实现方式略有不同。

@RequestParam注解是SpringMVC框架提供的注解,底层是基于Java反射机制实现的。它通过反射获取Controller方法的参数信息,并根据参数名和@RequestParam注解中的value属性值从请求中获取参数值,然后进行类型转换和参数绑定等操作。

而HttpServletRequest的getParameter()方法是Servlet API中提供的方法,底层是基于Servlet容器实现的。它通过解析HTTP请求中的参数字符串,将参数名和参数值存储在一个名为parameterMap的Map对象中,然后通过调用getParameter()方法获取对应的参数值。

2.2 @PathVariable

@PathVariable用于将 URL中的占位符参数绑定到方法的形参上。例如,对于以下的请求 URL:http://localhost:8080/user/1001,其中的 “1001” 就是一个占位符参数,可以使用 @PathVariable 注解将其绑定到方法的形参上。下面看一下具体的例子

@Slf4j @RestController @RequestMapping("/book") public class BookController { /** * @PathVariable * http://localhost:8080/book/test7/23 * url参数中的id必须要和@PathVariable("id")一致 * @param id */ @GetMapping("/test7/{id}") public void test7(@PathVariable(value = "id") Long id) { log.info(id.toString()); // 23 } /** * @PathVariable * http://localhost:8080/book/test8/42 * 如果不指定参数名,则默认使用形参名称作为占位符参数名 * @param id */ @GetMapping("/test8/{id}") public void test8(@PathVariable Long id) { log.info(id.toString()); // 42 } } 3.@RequsetBody

@RequestBody用于将请求体中的JSON或XML数据绑定到方法的形参上。而最常用的使用请求体传参的无疑是Post请求了,所以使用@RequestBody接收数据时,一般都用Post方式进行提交。

@Slf4j @RestController @RequestMapping("/book") public class BookController { /** * @RequestBody * http://localhost:8080/book/test9 * 请求体中: * { * "name": "《编译原理》", * "id": 10086, * "price": 40.6 * } * @param book */ @PostMapping("/test9") public void test9(@RequestBody Book book) { log.info(book.toString()); // Book(id=10086, name=《编译原理》, price=40.6) } } 三、总结

接收前端页面参数是实现前后端数据交互的关键步骤,常见的接收传参的方法有:无注解接收、@RequestParam注解、@PathVariable注解和@RequestBody。

无注解接收:直接在方法的参数中定义需要接收的参数名,Spring会自动匹配参数名和前端传递的参数名,并将值赋给参数。@RequestParam注解:使用@RequestParam注解可以将前端传递的参数与方法参数绑定,例如:@RequestParam(“name”) String name,表示将前端传递的名为“name”的参数值绑定到方法参数name上。@PathVariable 注解:使用@PathVariable注解可以将URL中的参数与方法参数绑定,例如:@GetMapping(“/book/{id}”),表示将URL中的{id}与方法参数id绑定。@RequestBody:使用@RequestBody注解可以将前端传递的JSON数据转换为Java对象,例如:@RequestBody Book book,表示将前端传递的JSON数据转换为Book对象。

总之,根据不同的需求和场景,需要选择不同的接收传参的方法,希望本篇文章对大家有帮助~

参考文章: 前端传值的几种方式:https://blog.csdn.net/weixin_42260782/article/details/126059313 @RequestParam:https://blog.csdn.net/sswqzx/article/details/84195043 @PathVariable:https://blog.csdn.net/weixin_45393094/article/details/108814901



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3