2017-12-13 2 views
1

Ich versuche, Service mit Swagger Inflector zu bauen. Aber currenltl ich stieß auf ein Problem, wenn ich versuche, ein komplexes Objekt zu meinem Prahler-Controller zu buchen. Bitte werfen Sie einen Blick auf meine unten stehende Konfiguration.Swagger inflector + komplexe Objekte

Mein 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" 

Mein Controller:

public class SomeServiceController { 

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

Wenn im so zu machen Post versuchen:

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

Im

bekommen
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 

Meine Abhängigkeiten:

<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> 

Bitte um Hilfe! Was ich verpasst habe?

+0

Haben Sie den Header "Content-Type: application/json" zu Ihrer Anfrage hinzugefügt? – Helen

+0

@Helen Ja, ive versuchte sowohl json als auch xml (für xml Struktur) Inhaltstypen. – Olekso

+0

Wie ich später fand, ist das Objekt, das zum Controller kommt, ObjectNode type. Also bedeutet das, dass swagger keine Konvertierung zum referenzierten Modell durchführt? – Olekso

Antwort

1

Das nächste Problem wurde gefunden: Meine Modellobjekte (Point) wurde in einem falschen Paket platziert. Wenn inflector kein Modell finden kann, wird JsonNode an die Controller-Methode übergeben. Das ist der Grund, warum ich Argument Typ Mismatch erhalten habe. Java konnte JsonNode nicht zu Point zuordnen.

Hoffe es wird jemandem helfen!