feign map 入参加不加@RequestBody 区别
时间: 2023-10-28 19:48:56 浏览: 49
好的,我理解了。对于您的问题,如果Feign声明式接口远程调用的入参是一个Map类型,不加注解@RequestBody,请求参数会以application/x-www-form-urlencoded方式传递,键值对会以&分隔。如果加上注解@RequestBody,请求参数会以application/json方式传递。加上@RequestBody注解后,请求的参数类型必须为application/json,这样就可以通过请求体(Body)以Json格式传递参数。
相关问题
feign传递map
在使用Feign进行请求时,如果需要传递Map参数,可以通过以下方式解决。首先,在Feign的配置类中注入SpringFormEncoder来支持Map传参时的表单参数编码。具体代码如下:
```java
@Configuration
public class FeignConfig {
@Bean
public Encoder feignFormEncoder(ObjectFactory<HttpMessageConverters> converters) {
return new SpringFormEncoder(new SpringEncoder(converters));
}
}
```
然后,在Feign接口的方法上添加`consumes="application/x-www-form-urlencoded"`注解,并将参数声明为`@RequestBody Map<String, ?>`。示例代码如下:
```java
@PostMapping(value = "/feign/sayHelloWithMap", consumes = "application/x-www-form-urlencoded")
String sayHelloWithMap(@RequestBody Map<String, ?> map);
```
这样就可以通过Feign传递Map参数了。\[1\]
#### 引用[.reference_title]
- *1* [springcloud openfeign通过map传递form表单参数](https://blog.csdn.net/LeoHan163/article/details/127269671)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* [.form文件_Feign完美解决服务之间传递文件、传递list,map、对象等情况](https://blog.csdn.net/weixin_39982537/article/details/110252979)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [springcloud feign 传递map 对象 多媒体文件](https://blog.csdn.net/sswltt/article/details/80415284)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
根据代码1“@FeignClient(name = "UserUgsApi", url = "${newbim.login-domain}") public interface IApplicationServicePlatformClient {@PostMapping("/ums/v1/feign/omp/project/search") ResultWrapper<QueryAllProject> listUserProject(@RequestHeader("BSP_TOKEN") String bspToken, @RequestHeader("BSP_USER_ID") String bspUserId, @RequestHeader("BSP_USER_ENV_ID") String bspUserEnvId, @RequestHeader("BSP_USER_TENANT") String bspUserTenant, @RequestBody ProjectCondition queryProjectDto);” ,修改并优化下面代码:public List<ProjectCountVO> projectCount(String beginTime, String endTime, Integer forceType, String projectId) { List<TaskTask> taskTaskList = this.listStatisticsTask(beginTime, endTime, forceType, projectId); if(CollectionUtil.isEmpty(taskTaskList)){ return Collections.emptyList(); } List<ProjectCountVO> result = new ArrayList<>(); Map<String, List<TaskTask>> projectTaskMap = taskTaskList.stream().collect(Collectors.groupingBy(TaskTask::getProjectId)); for (Map.Entry<String, List<TaskTask>> projectTaskEntry : projectTaskMap.entrySet()) { projectId = projectTaskEntry.getKey(); ProjectCountVO projectCountVO = new ProjectCountVO(); projectCountVO.setId(projectId); //查询项目名称String projectName = Optional.ofNullable(projectTaskMap.get(projectId)).map(taskList -> taskList.get(0).getName()).orElse(""); projectCountVO.setName(projectName); List<TaskTask> taskList = projectTaskEntry.getValue(); projectCountVO.setTaskCount(taskList.size()); Integer problemCount = CollectionUtil.isEmpty(taskList) ? 0 : taskList.stream().collect(Collectors.summingInt(task-> Optional.ofNullable(task.getProblemNum()).orElse(0))); projectCountVO.setProblemCount(problemCount); result.add(projectCountVO); } return result; }
根据代码1,我们可以发现该代码是通过 FeignClient 调用 UserUgsApi 的接口,获取项目列表信息。在此基础上,我们可以优化代码如下:
1. 将 FeignClient 接口的定义进行封装,以便于后续维护和调用。
```java
public interface UserUgsApiFeignClient {
@PostMapping("/ums/v1/feign/omp/project/search")
ResultWrapper<QueryAllProject> listUserProject(@RequestHeader("BSP_TOKEN") String bspToken,
@RequestHeader("BSP_USER_ID") String bspUserId,
@RequestHeader("BSP_USER_ENV_ID") String bspUserEnvId,
@RequestHeader("BSP_USER_TENANT") String bspUserTenant,
@RequestBody ProjectCondition queryProjectDto);
}
```
2. 将查询任务列表的代码进行封装,以便于后续的复用和维护。
```java
private List<TaskTask> listStatisticsTask(String beginTime, String endTime, Integer forceType, String projectId) {
// 省略具体实现
}
```
3. 将代码中的变量名进行修改,以便于提高代码的可读性和可维护性。
```java
public List<ProjectCountVO> projectCount(String beginTime, String endTime, Integer forceType, String projectId) {
List<TaskTask> taskList = this.listStatisticsTask(beginTime, endTime, forceType, projectId);
if(CollectionUtil.isEmpty(taskList)){
return Collections.emptyList();
}
List<ProjectCountVO> result = new ArrayList<>();
Map<String, List<TaskTask>> projectTaskMap = taskList.stream().collect(Collectors.groupingBy(TaskTask::getProjectId));
for (Map.Entry<String, List<TaskTask>> projectTaskEntry : projectTaskMap.entrySet()) {
String currentProjectId = projectTaskEntry.getKey();
ProjectCountVO projectCountVO = new ProjectCountVO();
projectCountVO.setId(currentProjectId);
//查询项目名称
String projectName = Optional.ofNullable(projectTaskMap.get(currentProjectId)).map(taskList -> taskList.get(0).getName()).orElse("");
projectCountVO.setName(projectName);
List<TaskTask> currentTaskList = projectTaskEntry.getValue();
projectCountVO.setTaskCount(currentTaskList.size());
Integer problemCount = CollectionUtil.isEmpty(currentTaskList) ? 0 : currentTaskList.stream().collect(Collectors.summingInt(task-> Optional.ofNullable(task.getProblemNum()).orElse(0)));
projectCountVO.setProblemCount(problemCount);
result.add(projectCountVO);
}
return result;
}
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)