当前位置 : 主页 > 大数据 > 区块链 >

feign响应Image流对象

来源:互联网 收集:自由互联 发布时间:2021-06-22
feign面向方法签名的http调用,越来越受欢迎,类型于rpc的thrift,只需要关注方法签名和返回值即可,当然feign响应流对象时,需要我们做一下特殊处理,否则会出现异常。也有一些文章

feign面向方法签名的http调用,越来越受欢迎,类型于rpc的thrift,只需要关注方法签名和返回值即可,当然feign响应流对象时,需要我们做一下特殊处理,否则会出现异常。也有一些文章通过重写HttpMessageConvert来实现,但我测试后发现还是失败的。> Accept: image/*会返回406 Not Acceptable### 解决方法feign代码,注意返回值必须是`feign.Response````  @PostMapping(value = "/wxa/getwxacodeunlimit")  feign.Response getQrImagePath(@RequestParam("access_token") String accessToken,@RequestBody Map<String, Object> body);  class WeixinClientFallback implements WeixinClient {```restcontroller代码,需要显示声明`produces`类型,这里因为是图片,所以声明为`MediaType.IMAGE_JPEG_VALUE```` @GetMapping(value = "/v1/api/sales/qrcode", produces = MediaType.IMAGE_JPEG_VALUE)  public void qrcode(HttpServletResponse response) {    //获取token    Map<String, Object> tokenMap = weixinClient.getToken("client_credential", wxAppId, wxAppSecret);    if (tokenMap == null) {      throw Exceptions.paramError("获取token失败");    }    if (tokenMap.containsKey("errcode")) {      throw Exceptions.paramError(MapUtils.getString(tokenMap, "errmsg"));    }    String scene = String.format("salesPersonId=%s&agencyId=%s",        TokenContext.getToken().getUserId(),        TokenContext.getToken().getCompanyId());    String token = MapUtils.getString(tokenMap, "access_token");    Map<String, Object> requestParams = new HashMap<>();    requestParams.put("scene", scene);    requestParams.put("page", weixinPage);    feign.Response imgReponse = weixinClient.getQrImagePath(token, requestParams);    if (imgReponse == null) {      throw Exceptions.paramError("获取二维码失败");    }    try (InputStream inputStream = imgReponse.body().asInputStream();         ServletOutputStream outputStream = response.getOutputStream()) {      response.setContentType("image/png");      outputStream.write(IOUtils.toByteArray(inputStream));    } catch (RuntimeException e) {      throw Exceptions.paramError("获取二维码失败");    } catch (Exception ex) {      throw Exceptions.paramError("获取二维码失败");    }  }```

网友评论