【Java】Feign调用外部项目,目标调用方法的入参为HttpServletRequest 、HttpServletResponse时的处理

今天在项目中要调用一个外部项目的接口,使用了Feign,发现被调用方法的参数传递有点特殊,返回数据的类型也不明确。

@FeignClient(name ="fwm",url="http://localhost:9001")//目标调用项目
public interface ISystemFeign {
    //①这一类返回的数据类型明确的,Feign接口声明直接将被调用方的方法头复制过来即可
    @PostMapping(params = "/ClsInfo.ctrl?method=queryClsInfo")
    List<ClsInfoFeignDto> queryClsInfo(@RequestBody ClsFeignDto dto);

    //②如果是这一类返回的数据类型并不明确的,可以直接使用String接口,再观察接收到的数据结果随后进行转化处理,下面主要以这个为例
    @GetMapping("/ClsInfo.ctrl?method=queryClsInfoByCode")
    String queryClsInfoByCode(@RequestParam String srhCode,@RequestParam String state);
}

被调用方这个方法如下,特殊点就在这个方法的入参是request与response,且通过AJAXUtil.success()直接返回数据

//观察此处的HttpServletRequest request、HttpServletResponse response,在Feign中可以直接忽略
@RequestMapping(params = "method=queryClsInfoByCode",method=RequestMethod.GET)//可以直接合并成@GetMapping
public void queryClsInfoByCode(HttpServletRequest request,HttpServletResponse response){
  String id = request.getParameter("srhCode");//与Feign接口声明中的参数对应
  String checked = request.getParameter("state");//与Feign接口声明中的参数对应
	……
  //省略对list集合的处理,这个list集合就是通过AJAXUtil.success()返回前端的
  AJAXUtil.success(response, (List) JsonConvertUtil.convertAnyKeyWithObject(list,arr), PageUtil.TOTAL);//这样子返回数据,Feign采用String先进行接收
}

顺带看一下AJAXUtil.success()

/**
 * 访问成功,向前台发送可分页的数据
 * @param response 响应对象
 * @param vos 当前页显示的数据
 * @param rowTotle 数据总行数
 */
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void success(HttpServletResponse response, Collection<?> vos, int rowTotle) throws SOFARuntimeException {
    check2JSONSize(vos);
    response.setContentType("text/json;charset=UTF-8");
    try {
        PrintWriter out = response.getWriter();
        Page page = new Page();
        page.setTotal(rowTotle);
        page.setData(vos);
        String msg = JSONObject.toJSONString(page);
        out.write(msg);
    } catch (IOException ex) {
        throw new SOFARuntimeException(ex);
    }
}

应用处注入Feign声明,就可以编写后续的业务代码了

@Autowired
private ISystemFeign iSystemFeign;

@Override
public List<ClsInfoDto> queryClsInfo(String srhCode){
  List<ClsInfoDto> resList = new ArrayList<>();
  String json = iSystemFeign.queryClsInfoByCode(srhCode,"1");//接收到数据之后就明确处理目标了
  Object object = JSON.parse(json);
  JSONObject obj = (JSONObject) object;
  JSONArray data = obj.getJSONArray("data");
  resList = JSONArray.parseArray(data.toJSONString(),ClsInfoDto.class);
  return resList;
}

再写上控制器,就可以采用postman测试接口了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加简单。通过使用Feign,我们可以定义一个接口,然后通过注解的方式来描述这个接口需要调用的远程服务的URL、请求方法、请求头等信息。然后Feign会根据这些注解自动生成实现类,我们只需要调用这个接口的方法即可完成对远程服务的调用。 在给出的代码中,我们可以看到使用Feign调用接口的示例。首先,在Main类中,通过调用FeignJust.scanPackage方法来扫描指定包下的接口。然后,通过调用FeignJust.getAction方法来获取指定接口的实例。接着,创建一个Admin对象,并设置用户名和密码。最后,通过调用baseAction的login方法来进行登录操作,并将返回结果打印出来。 在IBaseAction接口中,我们可以看到使用了@Url注解来指定远程服务的URL。在login方法上,使用了@RequestLine注解来指定请求方法和路径,使用@Headers注解来指定请求头。同,还定义了一个内部静态类Admin作为请求参数。 综上所述,给定的代码是一个使用Feign进行Java接口调用的示例。 #### 引用[.reference_title] - *1* *2* *3* [Javafeign的独立使用](https://blog.csdn.net/weixin_38526093/article/details/124510981)[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^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值