762 Star 6.6K Fork 1.4K

GVP萧明 / knife4j

 / 详情

springfox 3.0.0、knife4j 3.0.2生成的api文档,调试时不能正确预览gif格式的验证码

已完成
创建于  
2021-04-15 08:56
  1. 开发环境:
  • Spring Boot 2.4.4
  • springfox-boot-starter 3.0.0
  • knife4j-spring-boot-starter 3.0.2
    输入图片说明
  1. Controller代码
@ApiOperation(value = "获取验证码", produces = "image/gif")
@GetMapping(value = "/captcha", produces = "image/gif")
public void captcha(HttpServletRequest request, HttpServletResponse response) throws Exception {
    // 设置请求头为输出图片类型
    response.setContentType("image/gif");
    response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
    response.setHeader("Cache-Control", "post-check=0, pre-check=0");
    response.setHeader("Pragma", "no-cache");
    response.setDateHeader("Expires", 0);
    Captcha captcha = (Captcha) captchaCodeService.generateCaptcha();
    logger.info("生成了验证码:" + captcha.text());
    // 验证码存入session
    request.getSession()
           .setAttribute("captcha",
                         captcha.text()
                                .toLowerCase());
    captcha.out(response.getOutputStream());
}
  1. 问题:
    浏览器直接输入获取验证码的地址可以正常解析,如下图:
    输入图片说明
    api调试显示成了文字乱码,如下图:
    输入图片说明

评论 (2)

ghidra 创建了任务
ghidra 关联仓库设置为萧明/knife4j
ghidra 修改了描述
ghidra 修改了描述
展开全部操作日志

这个问题主要是因为在OpenAPI3的规范里面没有针对流的请求的判断,也就是虽然你代码里面指定了produces,但是最终springfox生成的OpenAPI3规范里面没有这方面的定义,导致Knife4j发送请求的时候,没有办法指定该接口是blob请求,接收到的对象也就无法处理转换成前端的Blob对象。这个是原因

和这个issue的情况是类似的#I374SP:文件下载始终是Knife4j.txt

第二个从你的代码中来看,现在的注解还是在用2的注解,例如ApiOperation这些注解都是OpenAPI2的规范,所以你可以考虑降级使用2.0.8版本,目前springfox3也不太稳定,毕竟才发布一个版本,2相对稳定一些,这个我在文档中也有说明,参考版本说明

萧明 添加了
 
enhancement
标签
萧明 添加了
 
question
标签
萧明 添加了
 
bug
标签
萧明 里程碑设置为Knife4j 2.0.9版本
萧明 任务状态待办的 修改为进行中
萧明 通过xiaoym/knife4j Pull Request !47任务状态进行中 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(2)
118100 xiaoym 1578918321
Java
1
https://gitee.com/xiaoym/knife4j.git
git@gitee.com:xiaoym/knife4j.git
xiaoym
knife4j
knife4j

搜索帮助

53164aa7 5694891 3bd8fe86 5694891