Springfox-Swagger2 406不可接受错误 - 弹簧4

时间:2016-11-24 14:39:55

标签: java spring cors swagger springfox

嗨我得到了“此请求识别的资源只能生成具有根据请求”接受“标题不可接受的特征的响应”错误,即Http 406不可接受。

我使用以下依赖关系来实现swagger

       <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错误。我是否需要在服务中添加任何注释?

1 个答案:

答案 0 :(得分:0)

我在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添加param名称。我该如何改变呢?

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

之后

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