场景:调用微信小程序生成小程序二维码接口
问题:直接将返回的结果图片二进制返给前端报错
原因:框架原因
解决方法:将byte[]转为base64响应给前端
代码实现
@Operation(summary = "小程序二维码")
@GetMapping("/QR")
public String generateQRCode(WxQuery query) {
try {
WxAccessTokenVO accessToken = wxService.getAccessToken();
String access_token = accessToken.getAccess_token();
String url = "https://api.weixin.qq.com/wxa/getwxacodeunlimit?access_token="+access_token;
URL apiUrl = new URL(url);
HttpURLConnection connection = (HttpURLConnection) apiUrl.openConnection();
connection.setRequestMethod("POST");
connection.setDoOutput(true);
// 设置请求参数
String string = JSON.toJSONString(query);
connection.getOutputStream().write(string.getBytes("UTF-8"));
connection.getOutputStream().flush();
connection.getOutputStream().close();
// 以InputStream形式获取响应
InputStream responseInputStream = connection.getInputStream();
// 从InputStream中读取图像字节
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while ((bytesRead = responseInputStream.read(buffer)) != -1) {
outputStream.write(buffer, 0, bytesRead);
}
byte[] bytes = outputStream.toByteArray();
String base64String = Base64.getEncoder().encodeToString(bytes);
// 关闭连接和流
responseInputStream.close();
connection.disconnect();
return base64String;
} catch (Exception e) {
log.info("生成二维码失败");
}
return null;
}