CustomAnnotationConverter.java

package io.swagger.v3.core.converting.override;

import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.v3.core.converter.AnnotatedType;
import io.swagger.v3.core.converter.ModelConverter;
import io.swagger.v3.core.converter.ModelConverterContext;
import io.swagger.v3.core.jackson.ModelResolver;
import io.swagger.v3.core.resolving.resources.BidimensionalArray;
import io.swagger.v3.core.util.AnnotationsUtils;
import io.swagger.v3.oas.models.media.Schema;

import java.util.Iterator;

public class CustomAnnotationConverter extends ModelResolver {

    public CustomAnnotationConverter(ObjectMapper mapper) {
        super(mapper);
    }

    @Override
    public Schema resolve(AnnotatedType type, ModelConverterContext context, Iterator<ModelConverter> chain) {
        Schema s = chain.next().resolve(type, context, chain);
        if (s != null) {
            if ("array".equals(s.getType()) && s.getItems() != null && "array".equals(s.getItems().getType())) {
                BidimensionalArray.MySizeAnnotation size = AnnotationsUtils.getAnnotation(BidimensionalArray.MySizeAnnotation.class, type.getCtxAnnotations());
                if (size != null) {
                    s.getItems().maxItems(size.maxItems());
                }
            }
            return s;
        }
        return null;
    }
}