场景
1. 网关请求发送到后端从GET变成了POST
2. 代码如下:
@FeignClient(name = "pd-auth-server", fallback = ResourceApiFallback.class)
public interface ResourceApi {
@GetMapping("/resource/list")
R<List> list();
@GetMapping("/resource")
R<List<Resource>> visible(ResourceQueryDTO resource);
}
@ApiOperation(value = "查询用户可用的所有资源",notes = "查询用户可用的所有资源")
@GetMapping
@SysLog("查询用户可用的所有资源")
public R<List<Resource>> visible(ResourceQueryDTO resource) {
if (resource == null) {
resource = new ResourceQueryDTO();
}
if (resource.getUserId() == null) {
resource.setUserId(getUserId());
}
return success(resourceService.findVisibleResource(resource));
}
@ApiOperation(value = "新增资源", notes = "新增资源不为空的字段")
@PostMapping
@SysLog("新增资源")
public R<Resource> save(@RequestBody @Validated ResourceSaveDTO data) {
Resource resource = dozer.map(data, Resource.class);
resourceService.save(resource);
return success(resource);
}
解决
1. 使用SpringQueryMap 将DTO转成query params , [参考文档](https://cloud.spring.io/spring-cloud-static/spring-cloud-openfeign/2.1.5.RELEASE/multi/multi_spring-cloud-feign.html#_feign_querymap_support)
@FeignClient(name = "pd-auth-server", fallback = ResourceApiFallback.class)
public interface ResourceApi {
@GetMapping("/resource/list")
R<List> list();
@GetMapping("/resource")
R<List<Resource>> visible(@SpringQueryMap ResourceQueryDTO resource);
}
2. 待测试
加入Feign的配置项
feign:
httpclient:
enabled: true
加入这两个依赖
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.9</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-httpclient</artifactId>
<version>10.2.3</version>
</dependency>