【问题标题】:Swagger @QueryParam cause error dropwizardSwagger @QueryParam 导致错误 dropwizard
【发布时间】:2015-04-22 01:55:37
【问题描述】:

我添加了@QueryParam 作为我的 REST 注释的一部分,但是当我与 swagger 集成时,它会在生成 swagger JSON 时导致以下错误:

Exception in thread "main" java.lang.IllegalArgumentException: Unrecognized Type: [null]
    at com.fasterxml.jackson.databind.type.TypeFactory._constructType(TypeFactory.java:406)
    at com.fasterxml.jackson.databind.type.TypeFactory.constructType(TypeFactory.java:354)
    at com.fasterxml.jackson.databind.ObjectMapper.constructType(ObjectMapper.java:1187)
    at com.wordnik.swagger.jackson.ModelResolver.resolveProperty(ModelResolver.java:62)
    at com.wordnik.swagger.converter.ModelConverterContextImpl.resolveProperty(ModelConverterContextImpl.java:59)
    at com.wordnik.swagger.jackson.ModelResolver.resolveProperty(ModelResolver.java:160)
    at com.wordnik.swagger.jackson.ModelResolver.resolveProperty(ModelResolver.java:62)
    at com.wordnik.swagger.converter.ModelConverterContextImpl.resolveProperty(ModelConverterContextImpl.java:59)
    at com.wordnik.swagger.converter.ModelConverters.readAsProperty(ModelConverters.java:71)
    at com.wordnik.swagger.jaxrs.DefaultParameterExtension.extractParameters(DefaultParameterExtension.java:49)
    at com.wordnik.swagger.jersey.SwaggerJersey2Jaxrs.extractParameters(SwaggerJersey2Jaxrs.java:100)
    at com.wordnik.swagger.jaxrs.Reader.getParameters(Reader.java:542)
    at com.wordnik.swagger.jaxrs.Reader.parseMethod(Reader.java:519)
    at com.wordnik.swagger.jaxrs.Reader.read(Reader.java:155)
    at com.wordnik.swagger.jaxrs.Reader.read(Reader.java:64)
    at com.wordnik.swagger.jaxrs.Reader.read(Reader.java:55)
    at com.wordnik.swagger.jaxrs.config.BeanConfig.setScan(BeanConfig.java:148)

有人知道怎么解决吗?是依赖错误吗?

我正在使用 swagger com.wordnik swagger-jersey2-jaxrs 版本 1.5.1-M2。有什么想法吗?

其他方法细节

    @GET
    @Path("/stuff/test")
    @ApiOperation(value = "Get some data", notes = "Returns some data", response = Existing.class, responseContainer = "List")
    @ApiResponses(value = { @ApiResponse(code = 404, message = "some error message") })
    @Timed
    public Response getData(
            @ApiParam(value = "filter", required = false, name = "filter") @QueryParam("filter") Optional<String> filterParam)
            throws Exception {
//codes here
}

【问题讨论】:

  • 如果您添加方法签名(包括注释(.
  • @Ron 我已经添加了方法签名。
  • 仅用于测试目的,您可以在没有Optional 的情况下尝试吗?保留字符串,看看它是否给你同样的错误。
  • 是的,删除 Optional 将使其运行良好。但我想保留 Optional。
  • 这可能是一个普遍问题,因为我使用的是 Optional

标签: json jackson swagger dropwizard


【解决方案1】:

当我忘记在 Application.run 方法中添加以下映射细节时,我遇到了类似的错误:

environment.getObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL);

如果没有这个设置,空值的映射会失败,这可能对应于您的 Optional。

【讨论】:

  • 尝试过仍然失败并显示相同的错误消息。
  • 这可能是一个普遍问题,因为我使用的是 Optional
【解决方案2】:

这似乎是从 1.3 迁移到 1.5 的倒退。我们过去处理过Optional,但它可能会导致转换失败。

你现在能做的最好的事情就是在 swagger-core 上打开一个问题。

【讨论】: