Springfox在Swagger 2.0的JSON定义中创建了 "ref "类型,而不是java.io.File对象。

问题描述 投票:0回答:1

我试图描述一个REST POST端点,它需要两个 java.io.File 对象的一部分 multipart/form-data 使用Swagger的Java注解来实现有效载荷。经过初步研究,我发现这可以通过指定隐式参数和设置以下属性来实现(即 type, dataTypeparamType)

    @ApiImplicitParams({
        @ApiImplicitParam(
                name="controlFile",
                value="Control file to be used in the comparison.",
                required=true,
                type="file",
                paramType="form",
                dataType="java.io.File"),
        @ApiImplicitParam(
                name="testFile",
                value="Test file to be used in the comparison.",
                required=true,
                type="file",
                paramType="form",
                dataType="java.io.File")
    })
    @PostMapping(
            consumes=MediaType.MULTIPART_FORM_DATA,
            produces=MediaType.APPLICATION_JSON
    )
    public ResponseEntity<Void> submitComparisonRequest(
            final UriComponentsBuilder uriBuilder,
            @Context final HttpServletRequest request) {

        try {
            final FileItemFactory factory = new DiskFileItemFactory();
            final ServletFileUpload upload = new ServletFileUpload(factory);
            final FileItemIterator items = upload.getItemIterator(request);

            final FileItemStream control = items.next();
            final FileItemStream test = items.next();

在JSON合同中描述这些参数的部分,一切看起来都是正确的。除此以外type 字段值为 ref 而不像 java.io.File.

"parameters": [
    {
        "name": "controlFile",
        "in": "formData",
        "description": "Control file to be used in the comparison.",
        "required": true,
        "type": "ref"
    },
    {
        "name": "testFile",
        "in": "formData",
        "description": "Test file to be used in the comparison.",
        "required": true,
        "type": "ref"
    }
],

我已经尝试了几种不同的组合,使用 dataTypedataTypeClass 和其他战略,从内到外 这个 SO问题,但我一直无法正确生成JSON合同。

作为参考,我使用的是Springfox 2.9.2和SpringMVC 5.2.2。

java rest swagger java-io springfox
1个回答
0
投票

在深入研究之后,我发现 dataType 对于 @ApiImplicitParam 参数不应该是通往 java.io.File 对象,它应该被指定为 __file.

是指向SpringFox文档的链接。(列在6.5 覆盖属性数据类型下)

© www.soinside.com 2019 - 2024. All rights reserved.