Генерация только тех параметров, которые мне действительно нужны, с помощью 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"
}
}
}
}
}
Разница заключается в ссылках на схемы запросов и схемах.