繁体   English   中英

在spring-rest和springfox中使用byte []

[英]Use of byte[] with spring-rest and springfox

我是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表单在客户端生成的。 因此,这不是一个简单的表单提交。

建议的上传文件的方法是使用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类的原始类型并提取了隐式属于请求的一部分的参数,那就是在使用该注释时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM