我正在使用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。
似乎我在这里错过了一些简单的东西......有什么想法吗?
非常感谢!
答案 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);
}
}