Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
模型类中JsonNode属性的springfox swagger配置_Json_Jackson_Swagger_Swagger Codegen_Springfox - Fatal编程技术网

模型类中JsonNode属性的springfox swagger配置

模型类中JsonNode属性的springfox swagger配置,json,jackson,swagger,swagger-codegen,springfox,Json,Jackson,Swagger,Swagger Codegen,Springfox,我有一个具有以下属性的模型“NewModel” import com.fasterxml.jackson.databind.JsonNode; @ApiModel( description = "Data Class to hold new details" ) public class NewModel { @ApiModelProperty( notes = "Value in JSON key:value format. Can be any key:value

我有一个具有以下属性的模型“NewModel”

import com.fasterxml.jackson.databind.JsonNode;

@ApiModel(
   description = "Data Class to hold new details"
)
public class NewModel {
   @ApiModelProperty(
      notes = "Value in JSON key:value format. Can be any key:value pair",
      example = "{ds:2017:08:05,hh:11}"
   )
   private final JsonNode value;
   (... getters and setters ...)
}
除此之外,我还有一些rest控制器,它们在请求体中获得JSON。我使用这个模型从请求体获取JSOn

我已经使用maven配置了springfox swagger,并生成了api定义。但在生成的API定义中,此模型已生成为

"NewModel": {
            "type": "object",
            "properties": {
                "value": {
                    "example": "{nds:2017:08:05,hh:11}",
                    "description": "Value of the stamp in JSON key:value format",
                    "$ref": "#/definitions/JsonNode"
                }
            },
            "description": "Data Class to hold details"
        }
并且生成了参考JsonNode定义

"definitions": {
    "JsonNode": {
        "type": "object",
        "properties": {
            "array": {
                "type": "boolean"
            },
            "bigDecimal": {
                "type": "boolean"
            },
            "bigInteger": {
                "type": "boolean"
            },
            "binary": {
                "type": "boolean"
            },
            "boolean": {
                "type": "boolean"
            },
            "containerNode": {
                "type": "boolean"
            },
            "double": {
                "type": "boolean"
            },
            "float": {
                "type": "boolean"
            },
            "floatingPointNumber": {
                "type": "boolean"
            },
            "int": {
                "type": "boolean"
            },
            "integralNumber": {
                "type": "boolean"
            },
            "long": {
                "type": "boolean"
            },
            "missingNode": {
                "type": "boolean"
            },
            "nodeType": {
                "type": "string",
                "enum": [
                    "ARRAY",
                    "BINARY",
                    "BOOLEAN",
                    "MISSING",
                    "NULL",
                    "NUMBER",
                    "OBJECT",
                    "POJO",
                    "STRING"
                ]
            },
            "null": {
                "type": "boolean"
            },
            "number": {
                "type": "boolean"
            },
            "object": {
                "type": "boolean"
            },
            "pojo": {
                "type": "boolean"
            },
            "short": {
                "type": "boolean"
            },
            "textual": {
                "type": "boolean"
            },
            "valueNode": {
                "type": "boolean"
            }
        }
    }
现在,当我使用此API定义生成客户端库时,客户端允许的JsonNode对象只有布尔变量,我无法为其分配实际的JSON字符串,因此无法将JSON值传递给连接服务器(我从该服务器生成API定义)

我想知道是否有一种方法可以使用swagger生成的库将Json字符串从客户端传递到服务器。或任何其他我可以实现所需最终结果的方向


感谢(并为这篇长篇文章表示歉意)

也许Springfox中引入的
替代性PeruleConvention
会对您有所帮助

例如,您可以执行以下操作:

@Bean
public AlternateTypeRuleConvention typeConvention(final TypeResolver resolver) {
    return new AlternateTypeRuleConvention() {

        @Override
        public int getOrder() {
            return Ordered.HIGHEST_PRECEDENCE;
        }

        @Override
        public List<AlternateTypeRule> rules() {
            return Collections.singletonList(
                    AlternateTypeRules.newRule(resolver.resolve(JsonNode.class), resolver.resolve(jsonNodeApi()))
            );
        }
    };
}

private Type jsonNodeApi() {
    return new AlternateTypeBuilder()
            .fullyQualifiedClassName(
                    String.format("%s.generated.%s",
                            JsonNode.class.getPackage().getName(),
                            JsonNode.class.getSimpleName()))
            .build();
}
@Bean
公共替换PeruleConvention类型约定(最终类型解析程序){
返回新的AlternativePeruleConvention(){
@凌驾
public int getOrder(){
返回顺序。最高优先级;
}
@凌驾
公开名单规则(){
return Collections.singletonList(
AlternateTypeRules.newRule(resolver.resolve(JsonNode.class)、resolver.resolve(jsonNodeApi())
);
}
};
}
私有类型jsonNodeApi(){
返回新的AlternateTypeBuilder()
.fullyQualifiedClassName(
String.format(“%s.generated.%s”,
JsonNode.class.getPackage().getName(),
JsonNode.class.getSimpleName())
.build();
}

AlternateTypeBuilder
还允许您在必要时指定自定义字段。

ApiModelProperty中的属性dataType=“java.util.Map”应该会有所帮助

public class NewModel {
   @ApiModelProperty(
      example = "{ds:2017:08:05,hh:11}",
      dataType = "java.util.Map"
   )
   private final JsonNode value;

面对类似的问题,您对此有何解决方案?