前后端传参

本文详细介绍了前后端如何通过不同方式传递参数,包括路径传参、普通GET请求传参、POST请求中的JSON及表单传参,并展示了如何在后端接收这些参数。

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

1、路径传参

前端传一个参数:123

后端接收一个参数:123

    // /{}是必须写的,id是自定义的
    // @PathVariable 这个注解也是必须写的,否则接不到参数
    @GetMapping("/{id}")
	//使用什么类型去接收id的值,要看你后端需要什么类型
    public void t1(@PathVariable String id) {
        log.info(id);
    }

前端传多个参数:123&456

后端接收多个参数:123&456

和接收一个参数一样,只是有几个参数@PathVariable注解就要写几个

    // /{}是必须写的,id是自定义的
    // @PathVariable 这个注解也是必须写的,否则接不到参数
    @GetMapping("/{id}/{num}")
	//使用什么类型去接收id的值,要看你后端需要什么类型
    public void t1(@PathVariable String id,@PathVariable String num) {
        log.info(id + num);
    }

2、普通传参

前端传参

后端接收

    //首先要明确一点,前端访问的后端路径中 ?问号后边的都是参数
    //@RequestParam 这个注解可以加,也可以不加
    //当需要这个注解底层的一些功能时,需要加,否则,可以不加,不会出错
    //value 这个可以改变前端传递参数的名字,"id" 他和前端的参数名一样即可,String id 这个id可以随便改名
    //如果不加@RequestParam 前端传参时,name可以不传,不会报错
    //但是加上@RequestParam 前端就必须传name的值,否则就i会出错
    //required = false 加上他,就表示前端传参时,name可以不传,不会报错
    @GetMapping("/testParam")
    public void t2(@RequestParam(value = "id") String id,@RequestParam(required = false) String name) {
        log.info(id + name);
    }

 3、post传参

第一种情况:前端用application/json,也就是json格式传参

 后端接收

    //如果前端是以json格式传递参数
    //那么在接收请求的时候,需要加上@RequestBody注解,值才能成功传递到后端
    //如果不加就是null对象,因为item也会被初始化
    //item是一个封装的实体类,建议在接收post请求时根据前端传递的json内容封装成实体类接收
    @PostMapping("/testParam")
    public void t3(@RequestBody Item item) {
        log.info(item.getId()+item.getName());
    }

第二种情况:前端使用form-data格式,也就是表单格式传参

 后端接收

    //如果前端使用form-data的格式传参,不可以写@RequestBody注解,否则会报错
    //item是一个封装的实体类,建议在接收post请求时根据前端传递的json内容封装成实体类接收
    @PostMapping("/testParam")
    public void t4(Item item) {
        log.info(item.getId()+item.getName());
    }

4、集合&数组

前端传递的参数

 后端可以有三种接收方式

第一种:使用list集合接收

    //接收前端以逗号分隔的多个参数,使用集合必须加上@RequestParam
    @PostMapping("/testParam")
    public void t5(@RequestParam List<Long> ids) {
        log.info("ids",ids);
    }

第二种:使用数组接收

    //使用数组,加不加@RequestParam注解,都可以
    @PostMapping("/testParam")
    public void t6(Integer[] ids) {
        log.info("ids",ids);
    }

第三种:使用可变参数接收

    //使用可变参数,接收到的也是数组类型,也可以不加@RequestParam注解
    @PostMapping("/testParam")
    public void t6(Integer ...ids) {
        log.info("ids",ids);
    }
### Spring MVC 中前后端传参的方法及实现方式 #### 一、基本概念 Spring MVC 是一种基于 Java 的轻量级 Web 开发框架,它通过控制器(Controller)、模型(Model)和视图(View)来分离业务逻辑与表现层。在实际开发中,前后端的数据交互主要依赖于 Controller 层中的方法以及对应的注解。 --- #### 二、常见传参方式及其特点 1. **简单类型参数** 当前端传递简单的字符串、整数或其他基础类型的参数时,可以直接通过 `@RequestParam` 注解读取这些参数[^2]。 ```java @RequestMapping("/example") public String example(@RequestParam("name") String name) { System.out.println(name); return "success"; } ``` 2. **路径变量(Path Variable)** 如果需要从前端 URL 路径中提取特定部分作为参数,则可以使用 `@PathVariable` 注解。 ```java @RequestMapping("/user/{id}") public String getUserById(@PathVariable("id") int userId) { System.out.println(userId); return "userDetails"; } ``` 3. **对象绑定** 对于复杂的表单提交或者 JSON 数据传输,可以通过定义一个 POJO 类并将其作为方法参数接收。Spring MVC 自动完成字段匹配和赋值操作。 ```java @RequestMapping("/submitForm") public String submitForm(User user) { System.out.println(user.getName() + ", " + user.getAge()); return "formSuccess"; } ``` 4. **JSON 数据处理** 若前端发送的是 JSON 格式的请求体,需借助 `@RequestBody` 来解析并将之映射至相应的 Java Bean 实例上[^4]。 ```java @PostMapping("/saveData") public ResponseEntity<String> saveData(@RequestBody FamilyInfo familyInfo) { System.out.println(familyInfo.toString()); return new ResponseEntity<>("Saved successfully!", HttpStatus.OK); } ``` 5. **请求头信息获取** 使用 `@RequestHeader` 可捕获 HTTP 请求头部的信息,并指定具体的键名以便精准定位所需数据[^3]。 ```java @GetMapping("/testHeaders") public void testRequestHeader( @RequestHeader("User-Agent") String userAgent, @RequestHeader("Accept-Language") String acceptLanguage) { System.out.println("User Agent: " + userAgent); System.out.println("Accepted Languages: " + acceptLanguage); } ``` 6. **文件上传支持** 针对多部件形式的 POST 请求(如图片或文档上传),应引入 MultipartFile 参数配合 multipart/form-data MIME 类型共同工作。 ```java @PostMapping("/uploadFile") public String uploadFile(@RequestParam("file") MultipartFile file) throws IOException { byte[] bytes = file.getBytes(); Path path = Paths.get(UPLOAD_DIR + File.separator + file.getOriginalFilename()); Files.write(path, bytes); return "redirect:/uploadedFiles?fileName=" + file.getOriginalFilename(); } ``` 7. **自定义转换器** 在某些特殊场景下可能遇到默认机制无法满足需求的情况,此时可通过注册 Converter 或 Formatter 扩展系统的功能范围。 8. **返回 ModelAndView 结果集** 若要同时向页面提供动态数据又指定了渲染模板名称,则可采用 ModelAndView 方式构建响应内容。 ```java @RequestMapping("/showPage") public ModelAndView showPage() { Map<String, Object> modelMap = new HashMap<>(); modelMap.put("title", "Welcome Page"); return new ModelAndView("welcome", modelMap); } ``` 9. **异步调用模式** 支持非阻塞式 I/O 流程设计,在高并发环境下能够显著提升服务器吞吐能力。 ```java @GetMapping("/asyncExample") public CompletableFuture<String> asyncExample() { return CompletableFuture.supplyAsync(() -> { try { Thread.sleep(2000L); } catch (InterruptedException e) {} return "Asynchronous result!"; }); } ``` --- #### 三、注意事项 - 确保实体类属性命名遵循驼峰规则并与前端字段保持一致;否则需要额外配置映射关系。 - 处理复杂嵌套结构时建议避免使用内部类声明目标载体类型,因为这可能导致序列化失败等问题。 - 设置合理的校验策略防止非法输入引发异常行为影响用户体验。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值