FeignClient调用接口接收不到参数问题
package com.jerry.market.controller;
import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.jerry.market.entity.*;
import com.jerry.market.integration.FeignClientService;
import com.jerry.market.integration.TemplateClientService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
/**
* Feign控制器
*
* @author makejava
* @since 2022-04-22 15:31:00
*/
@RestController
@RequestMapping("/feign")
@Api(tags = "FeignController", description = "Feign控制器")
public class FeignController {
@Resource
private FeignClientService feignClientService;
/**
* FeignClient服务端
* 1.客户端请求 isFilterUsemark Boolean,服务端请求 isFilterUsemark boolean,通过Feign可以接收到值
* 2.客户端请求 isFilterUsemark Boolean,服务端请求 isFilterUsemark Boolean,通过Feign可以接收到值
* 3.客户端请求 isFilterUsemark boolean,服务端请求 isFilterUsemark boolean,通过Feign可以接收到值
* 4.客户端请求 isFilterUsemark boolean,服务端请求 isFilterUsemark Boolean,通过Feign不可以接收到值
* <p>
* 通过Feign调用接口,请求参数接收不到值问题
* 1.使用Feign与hutool的httpUtil调用,且请求对象含有以is开头的命名的布尔类型参数,且请求基本类型,服务端包装类型,接收不到值。
* 2.通过集合不存在这种问题,即使请求参数中含有以is开头的命名的参数。
* 3.通过给以is开头的参数添加序列化注解@JsonProperty("isDeletedJson")
* 4.其他类型即使含有以is开头的参数也不会受影响
*/
@PostMapping("/getFeignServer")
@ApiOperation(value = "FeignClient服务端")
public Response getFeignServer(@RequestBody FeignClientServerDTO feignClientServerDTO) {
System.out.println("【FeignClient服务端】请求参数:" + feignClientServerDTO);
return Response.success(feignClientServerDTO);
}
/**
* FeignClient根据请求对象查询客户端
*/
@GetMapping("/getFeignClientByObject")
@ApiOperation(value = "FeignClient根据请求对象查询客户端")
public Response getFeignClientByObject() {
//构建请求对象
FeignClientReqDTO dto = buildFeignClientReqDTO();
System.out.println("【FeignClientObject客户端】请求参数:" + dto);
JSONObject ret = feignClientService.getFeignClientByObject(dto);
System.out.println("【FeignClientObject客户端】响应参数:" + ret);
return Response.success(ret);
}
/**
* FeignClient根据请求集合查询客户端
*/
@GetMapping("/getFeignClientByMap")
@ApiOperation(value = "FeignClient根据请求集合查询客户端")
public Response getFeignClientByMap() {
//构建请求对象
Map<String, Object> map = buildFeignClientReqMap();
System.out.println("【FeignClientMap客户端】请求参数:" + map);
JSONObject ret = feignClientService.getFeignClientByMap(map);
System.out.println("【FeignClientMap客户端】响应参数:" + ret);
return Response.success(ret);
}
/**
* HttpClient根据请求对象查询客户端
*/
@GetMapping("/getHttpClientByObject")
@ApiOperation("查询模板通过HttpClient")
public Response<JSONObject> getHttpClientByObject() {
//创建头信息
HttpRequest post = HttpUtil.createPost("http://localhost:8090/feign/getFeignServer");
//构建请求对象
FeignClientReqDTO dto = buildFeignClientReqDTO();
post.body(JSON.toJSONString(dto));
//集合参数,isFilterUsemark可以接收参数
//Map<String, Object> map = buildFeignClientReqMap();
//((map));
System.out.println("【查询模板通过HttpClient】请求参数:" + dto);
HttpResponse response = post.execute();
System.out.println("【查询模板通过HttpClient】响应参数:" + response.body());
return Response.success(JSON.parseObject(response.body()));
}
/**
* 构建请求对象
*
* @return FeignClientReqDTO
*/
private FeignClientReqDTO buildFeignClientReqDTO() {
//构建请求对象
FeignClientReqDTO dto = new FeignClientReqDTO();
dto.setTenantId("123456789");
dto.setBizId("helloWorld");
//布尔类型
dto.setIsFilterMark(false);
dto.setFilterMarkJson(false);
dto.setFilterMarkSimple(false);
dto.setMark(false);
//String类型
dto.setStart("1");
dto.setIsDeleted("2");
dto.setIsDeletedJson("3");
//整数类型
dto.setTools(4);
dto.setToolCount(5);
dto.setIsToolNumber(6);
dto.setIsToolNumberJson(7);
return dto;
}
/**
* 构建请求Map
*
* @return Map
*/
private Map<String, Object> buildFeignClientReqMap() {
//构建请求对象
Map<String, Object> map = new HashMap<>(9);
map.put("tenantId", "123456789");
map.put("bizId", "helloWorld");
//布尔类型
map.put("isFilterMark", false);
map.put("isFilterMarkJson", false);
map.put("isFilterMarkSimple", false);
map.put("mark", false);
//String类型
map.put("start", "1");
map.put("isDeleted", "2");
map.put("isDeletedJson", "3");
//整数类型
map.put("tools", "4");
map.put("toolCount", "5");
map.put("isToolNumber", "6");
map.put("isToolNumberJson", "7");
return map;
}
}