【问题标题】:Swagger inflector + complex objectsSwagger 变形器 + 复杂对象
【发布时间】:2017-12-13 10:09:01
【问题描述】:

我正在尝试使用 swagger 变形器构建服务。 但是当我试图将复杂的对象发布到我的招摇控制器时,我遇到了一些问题。请查看下面提供的我的配置。

我的 swagger.yaml:

swagger: "2.0"
info:
  version: 1.0.0
  title: Dummy Controller
basePath: /v1
tags:
  - name: Dummy Controller
    description: Dummy controller
schemes:
  - http
paths:
  /someService/create:
    post:
      tags:
        - someService
      summary: Test
      description: ""
      operationId: createPoint
      consumes:
            - application/json
            - application/xml
      produces:
        - application/xml
        - application/json
      parameters:
        - in: body
          name: body
          description: Created object
          required: false
          schema:
            $ref: '#/definitions/Point'
      responses:
        default:
          description: successful operation

definitions:
    Point:
    title: Point
    description: ''
    type: object
    properties:
      latitude:
        description: ''
        type: string
      longitude:
        description: ''
        type: string
    required:
    - latitude
    - longitude
  ApiResponse:
    properties:
      code:
        type: integer
        format: int32
      type:
        type: string
      message:
        type: string
    xml:
      name: "##default"

我的控制器:

public class SomeServiceController {

  public ResponseContext createPoint(RequestContext request, Point point){
    System.out.println(point);
    return new ResponseContext()
            .status(Status.OK);
  }
}

当我试图发这样的帖子时:

POST http://localhost:8080/v1/someService/create
{
"latitude":"10",
"longitude":"20"
}

我来了

11:36:51.814 [qtp931940545-13] ERROR i.s.i.c.SwaggerOperationController - failed to invoke method public io.swagger.inflector.models.ResponseContext com.swagger.test.SomeServiceController.createPoint(io.swagger.inflector.models.RequestContext,com.swagger.test.model.Point)
java.lang.IllegalArgumentException: argument type mismatch

我的依赖:

<dependencies>
    <dependency>
        <groupId>io.swagger</groupId>
        <artifactId>swagger-inflector</artifactId>
        <version>1.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
        <version>3.1.1</version>
    </dependency>
</dependencies>

请帮忙!我错过了什么?

【问题讨论】:

  • 您是否在请求中添加了Content-Type: application/json 标头?
  • @Helen 是的,我尝试了 json 和 xml(用于 xml 结构)内容类型..
  • 后来我发现,控制器中的对象是ObjectNode类型的。所以这意味着swagger没有对引用模型进行任何转换?
  • 不知道。可以试试最新版本的 Inflector 2.0.0-rc0 吗?

标签: java json controller swagger


【解决方案1】:

发现下一个问题: 我的模型对象(Point)被放置在错误的包中。 如果变形器找不到模型,它会将 JsonNode 传递给 Controller 方法。 这就是为什么我收到参数类型不匹配的原因。 Java 无法将 JsonNode 映射到 Point。

希望对某人有所帮助!

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 1970-01-01
    • 1970-01-01
    • 2021-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多