Swagger - 使用@ApiParam与@CookieParam一起发行

时间:2015-06-19 17:36:51

标签: java cookies swagger param

我正在使用Swagger 1.3.10并尝试让Swagger UI在功能上接受REST服务的cookie参数。这是我的Java代码示例:

    public Response getUserInfo(
    @Context HttpHeaders headers, 
    @ApiParam(value="Enter brand code as an Integer", defaultValue="101", required=true) @CookieParam(value = "userBrand") String brand)

现在实际的Swagger UI实际上渲染得很好......它甚至用" 101"填充默认值。在这种情况下。问题是当我点击"试一试"品牌参数始终为null。

似乎我在这里错过了一些简单的东西......有什么想法吗?

非常感谢!

2 个答案:

答案 0 :(得分:1)

Swagger并不真正支持Cookie参数。 Swagger-core将它们生成为cookie参数,但其他工具不支持它们,因为它不是规范的官方部分。

答案 1 :(得分:1)

不支持开箱即用的 Cookie 参数。相反,您需要为此编写自己的处理程序。看这里:

import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.CookieValue;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.ParameterBuilderPlugin;
import springfox.documentation.spi.service.contexts.ParameterContext;

import java.lang.annotation.Annotation;
import java.util.List;

import static springfox.documentation.swagger.common.SwaggerPluginSupport.SWAGGER_PLUGIN_ORDER;
import static springfox.documentation.swagger.common.SwaggerPluginSupport.pluginDoesApply;

/*
 * Custom swagger configuration to support Cookies in requests
 *
 * Created by Saransh Bansal on 11/03/2021, 13:02
 */
@Component
@Order(SWAGGER_PLUGIN_ORDER + 1000)
public class SwaggerCustomParameterBuilderPlugin implements ParameterBuilderPlugin {

    @Override
    public void apply(ParameterContext context) {
        if (isCookieValue(context)) {
            context.parameterBuilder().parameterType("cookie");
        }
    }

    private boolean isCookieValue(ParameterContext context) {
        List<Annotation> annotations = context.resolvedMethodParameter().getAnnotations();
        return annotations.stream().anyMatch(annotation -> annotation.annotationType() == CookieValue.class);
    }

    @Override
    public boolean supports(DocumentationType documentationType) {
        return pluginDoesApply(documentationType);
    }
}

代码提供者:https://github.com/mwinteringham