如何让 camel-swagger-java 扫描 Camel Rest api 路由并表示一个 Rest 端点参数,该参数是 Pojo 对象的列表,其中这些 Pojo 具有 json 属性?
当尝试使用 List 或 SamplePojo[] 作为 Camel Rest 端点主体时,camel-swagger-java 使用
.type(SamplePojo[].class)
和 .typeList(SamplePojo.class)
来生成一个 api 页面,该页面显示主体只是一个字符串而不是显示 json对于 SamplePojo 类中的所有属性。
有一个 .arrayType 方法可以用于路由参数,但没有提到应该指定什么:.arrayType("whatHere?")
下面使用它的尝试会大摇大摆地将类型显示为字符串,而不是 json 属性:
.arrayType(SamplePojo.class.getName())
RestOperationParamDefinition:
/**
* Sets the Swagger Parameter array type.
* Required if data type is "array". Describes the type of items in the array.
*/
public void setArrayType(String arrayType) {
this.arrayType = arrayType;
}
有人问这个问题但没有解决:
有 swagger 的骆驼示例,但没有 List 参数示例:
我也有同样的问题。据我所知,这个设置器仅支持简单类型(字符串、浮点数等)。以下来源来自 org.apache.camel.swagger.RestSwaggerReader:
if (isArray) {
if (param.getArrayType() != null) {
if (param.getArrayType().equalsIgnoreCase("string")) {
defineItems(serializableParameter, allowableValues, new StringProperty(), String.class);
}
if (param.getArrayType().equalsIgnoreCase("int")
|| param.getArrayType().equalsIgnoreCase("integer")) {
defineItems(serializableParameter, allowableValues, new IntegerProperty(),
Integer.class);
}
if (param.getArrayType().equalsIgnoreCase("long")) {
defineItems(serializableParameter, allowableValues, new LongProperty(), Long.class);
}
if (param.getArrayType().equalsIgnoreCase("float")) {
defineItems(serializableParameter, allowableValues, new FloatProperty(), Float.class);
}
if (param.getArrayType().equalsIgnoreCase("double")) {
defineItems(serializableParameter, allowableValues, new DoubleProperty(), Double.class);
}
if (param.getArrayType().equalsIgnoreCase("boolean")) {
defineItems(serializableParameter, allowableValues, new BooleanProperty(),
Boolean.class);
}
}
可以先将其转换为字符串,然后通过指定Pojo类来使用JacksonDataFormat。
.convertBodyTo(String.class).unmarshal(new JacksonDataFormat(Pojo[].class))
我也有同样的问题,到目前为止除了每次手动编辑 openapi.yaml 文件之外没有任何解决方案。