SpringMVC前后端交互使用场景总结

本文详细介绍了在Spring Boot中处理HTTP GET和POST请求时,如何通过HttpServletRequest、路径变量、@RequestParam、@RequestParamMap、对象传参以及接收JSON数据的方式接收参数。包括了各种方式的示例代码和应用场景。

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

目录

Get 请求

1、使用 HttpServletRequest 获取参数

 2、参数直接在路径中传递

 3、参数跟在 ? 后面

4、使用 Map 接收参数值(可传递多个,用 & 连接)

5、使用对象传参

Post 请求

1、使用 HttpServletRequest 获取参数(通用型)

2、Form 表单数据(写在 body 里)

3、使用 Map 传参

4、使用对象来接收参数

6、使用 Map 接收 JSON 数据(@RequestBody)


Get 请求


说明:@GetMapping("/getInfo")  与 @RequestMapping(value = "/getInfo",method = RequestMethod.GET)  有相同的效果。

1、使用 HttpServletRequest 获取参数


请求URL地址:http://127.0.0.1/getInfo5?userId=123&userName=流放深圳

controller层接收方法:

   @GetMapping("/getInfo5")
    public String getInfo5(HttpServletRequest request){
        String userName = request.getParameter("userName");
        Integer userId = Integer.parseInt(request.getParameter("userId"));
        System.out.println("userName="+userName+",userId="+userId);
        return "userName="+userName+",userId="+userId;
    }


 
2、参数直接在路径中传递


请求URL地址(要传递的参数是 biandan):http://127.0.0.1/getInfo/biandan

controller:

@RestController
public class UserController {
    @GetMapping("/getInfo/{userName}")
    public UserEntity getInfo(@PathVariable(value = "userName") String userName){
        UserEntity userEntity = new UserEntity();
        userEntity.setUserId(123);
        userEntity.setUserName(userName);
        return userEntity;
    }
}


注意事项:

这种方式的传参,只能传递数字、英文字母。如果传递中文,会报错 400 Bad Request。除非使用汉字转码。

汉字转码地址:https://www.sojson.com/encodeurl.html  比如:

 3、参数跟在 ? 后面


请求URL地址:http://127.0.0.1/getInfo2?userName=流放深圳

后台写法:required = false 是非必传的意思,不传递则为 null。defaultValue 是默认值,当前端不传递时,默认的数据。

    @GetMapping("/getInfo2")
    public UserEntity getInfo2(@RequestParam(value = "userName",required = false,defaultValue = "无名") String userName){
        UserEntity userEntity = new UserEntity();
        userEntity.setUserId(123);
        userEntity.setUserName(userName);
        return userEntity;
    }

测试结果

4、使用 Map 接收参数值(可传递多个,用 & 连接)


请求URL地址:http://127.0.0.1/getInfo3?userName=流放深圳&age=18

后台写法:

    @GetMapping("/getInfo3")
    public String getInfo3(@RequestParam Map<String,Object> reqMap){
        String userName = (String)reqMap.get("userName");
        Integer age = Integer.parseInt(reqMap.get("age").toString());
        return "userName="+userName+",age="+age;
    }


结果:

5、使用对象传参


请求URL地址(与 Map 传参写法相同):http://127.0.0.1/getInfo4?userId=123&userName=流放深圳

后台写法:

    @GetMapping("/getInfo4")
    public String getInfo4(UserEntity userEntity){
        String userName = userEntity.getUserName();
        Integer userId = userEntity.getUserId();
        System.out.println("userName="+userName+",userId="+userId);
        return "userName="+userName+",userId="+userId;
    }

Post 请求


说明:@PostMapping("/getInfo")  与 @RequestMapping(value = "/getInfo",method = RequestMethod.POST)  有相同的效果。

1、使用 HttpServletRequest 获取参数(通用型)


请求URL地址(可以放在 Params、Body【form-data、x-www-form-urlencoded】都可以):http://127.0.0.1/getInfo6?userId=123&userName=流放深圳

后台写法:

  @GetMapping("/getInfo5")
    public String getInfo5(HttpServletRequest request){
        String userName = request.getParameter("userName");
        Integer userId = Integer.parseInt(request.getParameter("userId"));
        System.out.println("userName="+userName+",userId="+userId);
        return "userName="+userName+",userId="+userId;
    }


 
 
2、Form 表单数据(写在 body 里)


请求URL地址:(可以放在 Params、Body【form-data、x-www-form-urlencoded】都可以):http://127.0.0.1/getInfo7

后台写法:

    @PostMapping("/getInfo7")
    public String getInfo7(@RequestParam(value = "userName",required = false)String userName,
                           @RequestParam(value = "userId",required = false)Integer userId){
        System.out.println("userName="+userName+",userId="+userId);
        return "userName="+userName+",userId="+userId;
    }


 

3、使用 Map 传参


请求URL地址(可以放在 Params、Body【form-data、x-www-form-urlencoded】都可以):http://127.0.0.1/getInfo8?userId=101&userName=流放深圳55

后台写法:

    @PostMapping("/getInfo8")
    public String getInfo8(@RequestParam Map<String,Object> reqMap){
        String userName = (String)reqMap.get("userName");
        Integer userId = Integer.parseInt(reqMap.get("userId").toString());
        return "userName="+userName+",userId="+userId;
    }


 

4、使用对象来接收参数


请求URL地址:http://127.0.0.1/getInfo9?userId=123&userName=今天高考

后台写法:

    @PostMapping("/getInfo9")
    public String getInfo9(UserEntity userEntity){
        String userName = userEntity.getUserName();
        Integer userId = userEntity.getUserId();
        System.out.println("userName="+userName+",userId="+userId);
        return "userName="+userName+",userId="+userId;
    }


 

5、使用 Bean 对象来接收 JSON 数据(@RequestBody)
请求URL地址:必须把参数放在 Body 下,并且选择 raw,使用 JSON 格式。否则报错 415:

{
    "timestamp": "2021-06-07T07:06:21.559+0000",
    "status": 415,
    "error": "Unsupported Media Type",
    "message": "Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported",
    "path": "/getInfo10"
}


后台写法:

    @PostMapping("/getInfo10")
    public String getInfo10(@RequestBody UserEntity userEntity){
        String userName = userEntity.getUserName();
        Integer userId = userEntity.getUserId();
        System.out.println("userName="+userName+",userId="+userId);
        return "userName="+userName+",userId="+userId;
    }


 

6、使用 Map 接收 JSON 数据(@RequestBody)


请求URL地址:

后台写法:

    @PostMapping("/getInfo11")
    public String getInfo11(@RequestBody Map<String,Object> reqMap){
        String userName = (String)reqMap.get("userName");
        Integer userId = Integer.parseInt(reqMap.get("userId").toString());
        return "userName="+userName+",userId="+userId;
    }


 
————————————————
版权声明:本文为优快云博主「流放深圳」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/BiandanLoveyou/article/details/117658392

### 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!"; }); } ``` --- #### 三、注意事项 - 确保实体类属性命名遵循驼峰规则并与前端字段保持一致;否则需要额外配置映射关系。 - 处理复杂嵌套结构时建议避免使用内部类声明目标载体类型,因为这可能导致序列化失败等问题。 - 设置合理的校验策略防止非法输入引发异常行为影响用户体验。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值