【问题标题】:Springfox-Swagger2 406 not acceptable error -Spring 4Springfox-Swagger2 406 不可接受的错误-Spring 4
【发布时间】:2017-04-08 22:03:37
【问题描述】:

您好,我收到“此请求标识的资源只能生成具有根据请求“接受”标头不可接受的特征的响应”错误,即 Http 406 不可接受。

我正在使用以下依赖项进行招摇

       <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.0.0</version>
        </dependency>

        <dependency>
            <groupId>com.fasterxml.jackson.jaxrs</groupId>
            <artifactId>jackson-jaxrs-json-provider</artifactId>
            <version>2.8.4</version>
        </dependency>

        <dependency>
            <groupId>com.wordnik</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.5.3-M1</version>
        </dependency>

我的招摇配置文件如下

@EnableSwagger2
@Component
public class SwaggerConfig {

    @Bean
    public Docket swaggerSpringMvcPlugin() {

        ArrayList<ResponseMessage> standardExpectedHttpResponses =
                createStandardExpectedHttpResponses();

        return new Docket(DocumentationType.SWAGGER_2)
                .useDefaultResponseMessages(false)
                .globalResponseMessage(RequestMethod.GET,
                        standardExpectedHttpResponses)
                .globalResponseMessage(RequestMethod.POST,
                        standardExpectedHttpResponses)
                .globalResponseMessage(RequestMethod.PUT,
                        standardExpectedHttpResponses)
                .globalResponseMessage(RequestMethod.DELETE,
                        standardExpectedHttpResponses)
                /*.globalOperationParameters((List<Parameter>) new ParameterBuilder()
                        .name("xyz=id")
                        .description("Description of someGlobalParameter")
                        .modelRef(new ModelRef("string"))
                        .parameterType("query")
                        .required(true)
                        .build())*/
                .produces(createStandardProducesConsumes())
                .consumes(createStandardProducesConsumes()).pathMapping("")
                .select()
                .apis(RequestHandlerSelectors
                        .basePackage("com.x.y.z"))
                .paths(PathSelectors.ant("/*"))
                .build().apiInfo(metadata());
    }

    private ApiInfo metadata() {

        return new ApiInfoBuilder()
                .title("API - xyz")
                .description(
                        "This is a Swagger-enabled API representation for the xyz.")
                .version("1.0").build();
    }

    private ArrayList<ResponseMessage> createStandardExpectedHttpResponses() {
        ArrayList<ResponseMessage> messages = new ArrayList<ResponseMessage>();

        messages.add(new ResponseMessage(200, "Ok", null));
        messages.add(new ResponseMessage(400, "Bad Request", null));
        messages.add(new ResponseMessage(401, "Unauthorized", null));
        messages.add(new ResponseMessage(403, "Forbidden", null));
        messages.add(new ResponseMessage(404, "Not Found", null));
        messages.add(new ResponseMessage(500, "Internal Server Error", null));

        return messages;
    }

    private HashSet<String> createStandardProducesConsumes() {
        HashSet<String> producesConsumes = new HashSet<String>();

        producesConsumes.add("application/json");

        return producesConsumes;
    }
}

还为项目设置了 CORS 过滤器。有什么遗漏吗?我该如何解决这个问题。

当我点击服务时,它会给我响应。它工作正常。我不必添加任何请求参数。上面的链接给了我回复。

当我点击http://localhost:8080/endpoint/v2/api-docs 时,我遇到了 http 406 错误。我需要为我的服务添加任何注释吗?

【问题讨论】:

  • 你能发布你的 CORS 过滤器吗?我遇到了类似的问题,因为我没有在我的 CORS 过滤器中设置所有响应标头。并尝试升级你的招摇依赖。我使用版本 2.5.0。 (而且我只看到发布了 2.6.1 版本)
  • 当然.. 谢谢您的回复。下面是我的 CORS 过滤器。
  • 我添加了如下的 CORS 过滤器
  • 我在 cors 过滤器中遗漏了什么吗?

标签: java spring swagger springfox http-status-code-406


【解决方案1】:

我已在我的 Servlet 中对以下代码进行了注释。它开始工作了。

<util:map id="mediaTypesMapping">
      <!--   <entry key="text/plain" value="text/plain;charset=UTF-8" />
        <entry key="text/html" value="text/html;charset=UTF-8" />
        <entry key="application/json" value="application/json;charset=UTF-8" />
        <entry key="application/xml" value="application/xml;charset=UTF-8" />
        <entry key="jsonp" value="application/javascript" />
        <entry key="application/javascript" value="application/javascript" />
        <entry key="application/x-protobuf" value="application/x-protobuf" /> -->
        <entry key="application/json" value="application/json" />
    </util:map>

我的服务网址是 http://localhost:8080/endpoint 我的 Swagger UI 正在将参数名称添加到 URL。我该如何改变这个?

我的 swagger UI 生成的 URL 是在传递查询参数之后

http://localhost:8090/rendpoint?allRequestParams=q%3Did%3A*%26fl%3Did

【讨论】:

    猜你喜欢
    • 2015-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多