【问题标题】:Use of byte[] with spring-rest and springfox将 byte[] 与 spring-rest 和 springfox 一起使用
【发布时间】:2016-10-16 17:45:42
【问题描述】:

我是 REST API 设计的新手,我有两个关于我正在尝试编写的 API 的问题。

我想创建一个服务,提供 PDF 文件编码,在数据库中创建一个对象。

我当前的服务如下所示:

@RequestMapping(value = "/create", method = RequestMethod.POST,
    produces = MediaType.APPLICATION_JSON_VALUE,
    consumes = MediaType.APPLICATION_OCTET_STREAM_VALUE)
public String create(@RequestBody byte[] pdf)

我的问题是:

  1. 是否“推荐”将 byte[] 与 REST API 一起使用? PS:该服务将被 Web 客户端和工具包使用。
  2. 我尝试使用 springfox 来记录我的 API。 UI 工具不允许我提交二进制数据。

我使用了以下注释

    @ApiImplicitParams({
    @ApiImplicitParam(name = "pdf", value = "PDF encoding", required = true,
     allowMultiple = true,
     paramType = "body", dataType = "byte")
  })

生成的 JSON 是:

{"type":"array","items":{"type":"string","format":"byte"}}

但是,UI 界面显示 PDF 编码的文本区域,并将任何内容作为字符串提交。 (例如,如果我提交值“5”,服务器会收到 [53])。

你知道我在这个级别缺少什么吗?

-- 编辑--

PDF 是在客户端从 HTML 表单生成的。所以不是简单的表单提交。

【问题讨论】:

    标签: java rest swagger-ui spring-rest springfox


    【解决方案1】:

    uploading files 的推荐方法是使用MultipartFile。所以我会将签名更改为如下所示的内容。

    @RequestMapping(value = "/create", method = RequestMethod.POST,
        produces = MediaType.APPLICATION_JSON_VALUE,
        consumes = MediaType.MULTIPART_FORM_DATA_VALUE) //<-- NOTE THIS
    public String create(@RequestParam("pdf") MultipartFile pdf) //<-- NOTE THIS
    

    其次,对于文档,暂时不要担心@ApiImplicitParams 的东西。看看上述解决方案是否有效。

    在您确定它在 swagger-ui 中按预期工作之后。使用@ApiParam 记录描述等。@ApiImplicitParams 用于记录参数,顾名思义implicit。因此,例如,如果您的方法签名处理像 HttpServletRequest 这样的原始类型并提取作为请求的隐式一部分的参数,那就是您使用该注释的时间。

    【讨论】:

    • 我没有使用 MultipartFile 类型,因为用户不会总是上传文件。 PDF 将在客户端从 HTML 表单生成。
    猜你喜欢
    • 1970-01-01
    • 2015-07-06
    • 2017-05-20
    • 2014-12-20
    • 2020-11-02
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-07-29
    相关资源
    最近更新 更多