Генерация только тех параметров, которые мне действительно нужны, с помощью swagger-maven-plugin в Java

Я хотел бы аннотировать свои методы запроса для плагина swagger maven, чтобы в схеме параметров запроса swagger отображались только те свойства, которые мне действительно нужны, а не все свойства класса. Например, если у меня есть личный класс с электронной почтой и физическим адресом, мне нужно только указать физический адрес для отправки обычной почты и наоборот для электронных писем, но сгенерированный чванство показывает оба для обоих вызовов.

Пример:

Пример класса персонажа:

public class Person {
    private String name;
    private String email;
    private String address;
    /* getters / setters */
}

Класс ресурса, который мне нужно аннотировать:

@Api
@RequestScoped
@Path("odpiranjeRacuna")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public class PersonResource {
    @EJB
    PersonSB personSB;

    @ApiOperation(value="Send an email")
    @POST
    @Path("email")
    public Response sendEmail(@ApiParam Person person){
        return Response.ok().entity(personSB.sendMail(person.getEmail(), person.getName())).build();
    }

    @ApiOperation(value="Send a regular mail")
    @POST
    @Path("snailmail")
    public Response sendSnailmail(@ApiParam Person person){
        return Response.ok().entity(personSB.sendSnailmail(person.getAddress(), person.getName())).build();
    }
}

(Сокращенно) генерируется чванство:

{
  "swagger" : "2.0",
  "paths":{
    "/email" : {
      "post" : {
        "summary" : "Send an email",
        "parameters" : [ {
          "in" : "body",
          "name" : "body",
          "required" : false,
          "schema" : {
            "$ref" : "#/definitions/Person"
          }
        } ]
      }
    },
    "/snailmail" : {
      "post" : {
        "summary" : "Send a regular mail",
        "parameters" : [ {
          "in" : "body",
          "name" : "body",
          "required" : false,
          "schema" : {
            "$ref" : "#/definitions/Person"
          }
        } ]
      }
    }
  },
  "definitions":{
    "Person" : {
      "type" : "object",
      "properties" : {
        "name" : {
          "type" : "string"
        },
        "email" : {
          "type" : "string"
        },
        "address" : {
          "type" : "string"
        }
      }
    }
  }
}

(Сокращенно) желаемое чванство:

{
  "swagger" : "2.0",
  "paths":{
    "/email" : {
      "post" : {
        "summary" : "Send an email",
        "parameters" : [ {
          "in" : "body",
          "name" : "body",
          "required" : false,
          "schema" : {
            "$ref" : "#/definitions/PersonWithEmail"
          }
        } ]
      }
    },
    "/snailmail" : {
      "post" : {
        "summary" : "Send a regular mail",
        "parameters" : [ {
          "in" : "body",
          "name" : "body",
          "required" : false,
          "schema" : {
            "$ref" : "#/definitions/PersonWithAddress"
          }
        } ]
      }
    }
  },
  "definitions":{
    "PersonWithEmail" : {
      "type" : "object",
      "properties" : {
        "name" : {
          "type" : "string"
        },
        "email" : {
          "type" : "string"
        }
      }
    },
    "PersonWithAddress" : {
      "type" : "object",
      "properties" : {
        "name" : {
          "type" : "string"
        },
        "address" : {
          "type" : "string"
        }
      }
    }
  }
}

Разница заключается в ссылках на схемы запросов и схемах.

0 ответов

Другие вопросы по тегам