记录一次springboot post传参的坑

记录一次springboot post传参的坑

由于项目需要,需要调用另外一个系统的接口(两个程序相互独立,但是都是自己开发的)。考虑到请求频率不高,时效性要求不高,所以采用的http的方式直接通信。

参数比较多,所以直接使用javabean的方式传参。post请求代码如下:
在这里插入图片描述
其中object是一个实体类,参数若干。

接收方代码如下:
在这里插入图片描述

测试的时候发现接收方没办法接收到发送的请求,但是直接用postman模拟请求是可以的。

初步怀疑是请求头的问题,所以在post请求中设置了请求头,但是发现依然无效。

测试了使用
MultiValueMap params = new LinkedMultiValueMap<>();
是可以的

所以怀疑是接收方接收参数的方式存在问题
查阅了其他资料上面的post请求代码,在请求参数前增加了 @RequestBody后,测试发现能够正常接收到参数了。
在这里插入图片描述
具体原因也没搞明白,后续会继续查资料看下原因。若有结果会继续补充。若有大佬知道原因烦请评论补充,谢谢。

Spring RestTemplate中几种常见的请求方式

### Spring Boot 请求传参方法及示例 #### 使用 `@RequestParam` 注解处理查询参数 当需要接收URL中的查询参数时,可以使用`@RequestParam`注解。此方式适用于GET请求携带简单数据的情况。 ```java @GetMapping("/greet") public String greet(@RequestParam(value = "name", defaultValue = "World") String name) { return "Hello, " + name; } ``` 上述代码片段展示了如何通过指定默认值来优雅地应对未提供必要参数的情形[^1]。 #### 利用 `@PathVariable` 实现RESTful风格API设计 对于构建遵循REST原则的应用程序而言,采用路径变量是一种常见的做法。这允许更直观地表示资源位置关系。 ```java @GetMapping("/users/{id}") public User getUserById(@PathVariable Long id){ // Logic to fetch user by ID goes here. return new User(); } ``` 这里定义了一个接受用户ID作为输入并返回对应用户的端点。 #### 处理表单提交的数据——`@ModelAttribute` 和 `@RequestBody` 针对POST或PUT操作下的复杂对象绑定场景,则分别有如下两种途径可供选择: - **`@ModelAttribute`:** 主要用于HTML表单直接映射至Java实体类字段上; ```java @PostMapping("/submitForm") public String submitForm(@ModelAttribute("user") User user){ // Process form data... return "redirect:/success"; } ``` - **`@RequestBody`:** 更适合JSON/XML等结构化文档格式的内容解析; ```java @PutMapping("/updateUser") public ResponseEntity<User> updateUser(@RequestBody User updatedUser){ // Update logic based on received JSON object. return new ResponseEntity<>(updatedUser, HttpStatus.OK); } ``` 这两种机制都支持自动转换前端发送过来的信息成为服务器端易于操控的形式[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值