FeignClient调用接口接收不到参数问题

时间:2025-03-18 16:05:53
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; } }