模型类中JsonNode属性的springfox swagger配置
我有一个具有以下属性的模型“NewModel”模型类中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
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;
面对类似的问题,您对此有何解决方案?