web-dev-qa-db-fra.com

Exclure des modèles ou des propriétés de la réponse swagger

J'ai utilisé swagger dans mon projet Apache cxf, utilisé les annotations @Api et @ApiOperations et @ApiParam et généré un doc api pour les autres services.

Mais je veux exclure certains des champs comme EntityTag, StatusType et MediaType etc. de l'attribut Models ou des modules complets ou de l'attribut properties.

Comment faire ça?

Je récupérais les données de la base de données et les définissais comme objet utilisateur et transmettais cet objet utilisateur au générateur de réponses JAX-RS.

Voici un de mes objets DTO:

  @ApiModel
  public class User{
  private String name;
   private String email;


 @ApiModelProperty(position = 1, required = true, notes = "used to display user name")
 public int getName() {
    return name;
 }

 public void setName(String name) {
    this.name= name;
}

@ApiModelProperty(position = 2, required = true, notes = "used to display user email")
public int getEmail() {
    return email;
}

 public void setEmail(String email) {
    this.email= email;
 }

Maintenant, je ne vois pas les champs ou les propriétés de l'objet utilisateur à l'intérieur du format json renvoyé par Swagger.

ma réponse de méthode de classe de service est:

    @GET
    @ApiOperation(value = "xxx", httpMethod = "GET", notes = "user details", response =  Response.class)
   public Response getUserInfo(){
        User userdto = userdaoimpl.getUserDetails();
        ResponseBuilder builder = Response.ok(user, Status.OK), MediaType.APPLICATION_JSON);
        builder.build();
 }


<bean id="swaggerConfig" class="com.wordnik.swagger.jaxrs.config.BeanConfig">
    <property name="resourcePackage" value="com.services.impl" />
    <property name="version" value="1.0.0" />
    <property name="basePath" value="http://localhost:8080/api" />
    <property name="license" value="Apache 2.0 License" />
    <property name="licenseUrl"
        value="http://www.Apache.org/licenses/LICENSE-2.0.html" />
    <property name="scan" value="true" />
 </bean>
8
LazyGuy

Tout d'abord, vous devez mettre à niveau vers la dernière version de swagger-core, actuellement 1.3.12 (vous utilisez une très ancienne).

Vous avez 3 façons de masquer une propriété:

  1. Si vous utilisez des annotations JAXB, vous pouvez utiliser @XmlTransient.
  2. Si vous utilisez Jackson, vous pouvez utiliser @JsonIgnore.
  3. Si vous n'utilisez pas l'un ou l'autre, ou si vous ne voulez pas affecter la dés/sérialisation générale de vos modèles, vous pouvez utiliser les @ApiModelProperty de hidden de Swagger attribut .

Gardez à l'esprit que vous devrez peut-être les définir sur vos getters/setters plutôt que sur la propriété elle-même. Jouez avec les définitions pour voir ce qui vous convient.

En ce qui concerne le problème avec le modèle User, le problème est que vous ne le référencez pas à partir de @ApiOperation (vous n'avez également pas besoin de la propriété httpMethod). Essayez de le changer comme suit:

@ApiOperation(value = "xxx", notes = "user details", response =  User.class)
25
Ron

Vous pouvez exclure des champs comme celui-ci:

@ApiModelProperty(position = 1, required = true, hidden=true, notes = "used to display user name")
3
Loran92