исключить свойства метакласса для классов Groovy Model в swagger

Как мы исключаем свойства метакласса в модели для «отличных» классов в качестве ответа? У меня есть ресурс Jax-Rs, который возвращает отличный объект с аннотацией swagger @ApiModel. Я вижу слишком много классных специфических атрибутов в пользовательском интерфейсе swagger. Как исключить его из сериализации?


@EqualsAndHashCode
@Document(collection = 'MongoCollection')
@CompileStatic
@ToString
@XmlRootElement
@XmlAccessorType(value = XmlAccessType.FIELD)
@ApiModel(value = "Represents a document from mongo collection")
class Foo {
..
..

}

Кажется, он использует Джексона для сериализации pogo-json? Как аннотировать мой классный класс, чтобы исключить попадание свойств метакласса в сериализованную строку json? Я пытался использовать аннотацию JsonIgnoreProperties, но это не помогло.

@JsonIgnoreProperties(ignoreUnknown = true, value = ["MetaClass","MetaMethod"])

person suman j    schedule 31.03.2014    source источник
comment
Вы пробовали использовать строчные буквы metaClass вместо MetaClass?   -  person tim_yates    schedule 31.03.2014
comment
Да. Не помогло с нижним регистром.   -  person suman j    schedule 31.03.2014
comment
Может связаны? github.com/martypitt/swagger-springmvc/issues/163   -  person tim_yates    schedule 31.03.2014
comment
Я убедился, что не использую jackson-1 ни в одной из моих зависимостей. classpath содержит все jar-файлы jackon-2. включение отладки показывает, что класс com.wordnik.swagger.converter.ModelPropertyParser не игнорирует свойство metaClass.   -  person suman j    schedule 31.03.2014
comment
это похоже на проблему чванства. Когда я проводил модульное тестирование службы Rest, Json возвращал поля JsonIgnoreProperties с уважением. Они были нулевыми в ответе. Но когда служебная документация просматривается с использованием swagger-ui, представление json для того же класса не игнорирует поля метакласса groovy.   -  person suman j    schedule 31.03.2014


Ответы (3)


Если вы используете springfox, см. springfox проблемы 752, нашел способ решить эту проблему:

docket.ignoredParameterTypes(groovy.lang.MetaClass.class)

Пример кода:

@Configuration
public class SpringFoxConfig {
     @Bean
     public Docket api() {
         return new Docket(DocumentationType.SWAGGER_2)
             .ignoredParameterTypes(groovy.lang.MetaClass.class)
             .select()
             .apis(RequestHandlerSelectors.any())
             .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
             .paths(PathSelectors.any())
             .build();
        }
    }
person btpka3    schedule 02.03.2017
comment
Это должно быть отмечено как правильный ответ - person Kong; 06.05.2021

Это может быть ошибка в swagger согласно https://github.com/wordnik/swagger-core/issues/519. Я переключился с классов groovy на классы java для объектов модели, чтобы продолжить работу на данный момент. Буду работать над созданием теста для этой проблемы, когда у меня будет время.

person suman j    schedule 08.04.2014

Обновление Swagger до версии >= 1.3.5 должно решить эту проблему.

person JDiPierro    schedule 30.06.2014