9

Is there any way to expose inheritance/ polymorphism in springfox swagger (2.7.0)? I know that swagger specification supports allOf. Is springfox support this? Below is sample domain model.

@ApiModel
public abstract class Animal{
    private String name;
}

@ApiModel(parent=Animal.class)
public class Dog extends Animal{
    ...
}

@ApiModel(parent=Animal.class)
public class Cat extends Animal{
    ...
}

If controller returns Animal, swagger contract doesn't expose Cat or Dog. It only returns Animal with it's properties.

krogulec.piotr
  • 164
  • 1
  • 8

3 Answers3

2

Spring-fox hadn't added support to polymorphism at the time you posted it. However, the 2.9.0 release seems to add it. Check this out

1

Support to polymorphism is still not available (Using 2.9.2). What we did in our project to have the models documented is just simply add them manually..

In your swaggerConfig:

@Bean
public Docket apiDocumentation() {
    TypeResolver typeResolver = new TypeResolver();
    return new Docket(DocumentationType.SWAGGER_2)
                .additionalModels(
                    typeResolver.resolve(type1.class),
                    typeResolver.resolve(type2.class),
                    typeResolver.resolve(typeX.class));
}

This should make the models available in swagger-ui

ApexOne
  • 97
  • 9
-1
@ApiModel(subTypes = {
Dog.class,
Cat.class},
discriminator = "type")
public abstract class Animal{
    private String name;
    public abstract AnimalType getType();
}

@ApiModel(parent=Animal.class)
public class Dog extends Animal{
    ...
}

@ApiModel(parent=Animal.class)
public class Cat extends Animal{
    ...
}

public enum AnimalType{
CAT,
DOG;
}

Solutions like above working for me, but documents only parent class with all options (types).