如何使用 Swagger 显示骆驼休息参数对象列表

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

如何让 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;
}

有人问这个问题但没有解决:

https://camel.465427.n5.nabble.com/How-to-get-long-and-array-data-types-working-in-camel-swagger-java-td5775343.html

有 swagger 的骆驼示例,但没有 List 参数示例:

https://github.com/Talend/apache-camel/blob/master/examples/camel-example-swagger-cdi/src/main/java/org/apache/camel/example/cdi/UserRouteBuilder.java

java rest apache-camel swagger
3个回答
0
投票

我也有同样的问题。据我所知,这个设置器仅支持简单类型(字符串、浮点数等)。以下来源来自 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);
    }
}

0
投票

可以先将其转换为字符串,然后通过指定Pojo类来使用JacksonDataFormat。

.convertBodyTo(String.class).unmarshal(new JacksonDataFormat(Pojo[].class))


0
投票

我也有同样的问题,到目前为止除了每次手动编辑 openapi.yaml 文件之外没有任何解决方案。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.