Manually configure Jackson Module for Spring WebTestClient

Предпосылки

  • Весенний ботинок: 2.0.3.RELEASE
  • Весенние ОТДЫХА Документы: 2.0.1.RELEASE
  • Spring Auto REST Docs: 2.0.2-SNAPSHOT - Какая локальная сборка текущего мастера.

GeoJsonModule настраивается в основном приложении:

import org.springframework.data.mongodb.core.geo.GeoJsonModule;

@SpringBootApplication
public class MyApplication {
    [...]
    @Bean
    public GeoJsonModule registerGeoJsonModule() {

        return new GeoJsonModule();
    }
    [...]
}

Я использую Spring Auto REST Docs и поэтому не могу использовать @AutoConfigure -Аннотация (или, по крайней мере, я не знаю, как).

Текущая реализация

Я настраиваю WebTestClient так:

WebTestClient
    .bindToApplicationContext(context)
    .configureClient()
    .filter(
        WebTestClientRestDocumentation
            .documentationConfiguration(restDocumentation)
            .snippets()
            .withDefaults(
                WebTestClientInitializer.prepareSnippets(context),
                CliDocumentation.curlRequest(),
                HttpDocumentation.httpRequest(),
                HttpDocumentation.httpResponse(),
                AutoDocumentation.requestFields(),
                AutoDocumentation.responseFields(),
                AutoDocumentation.pathParameters(),
                AutoDocumentation.requestParameters(),
                AutoDocumentation.description(),
                AutoDocumentation.methodAndPath(),
                AutoDocumentation.section()
            )
    )
    .build();

Однако при использовании WebTestClient, как это, я получаю следующую ошибку:

org.springframework.core.codec.CodecException: Type definition error: [simple type, class org.springframework.data.mongodb.core.geo.GeoJsonPoint]; nested exception is com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Cannot construct instance of `org.springframework.data.mongodb.core.geo.GeoJsonPoint` (no Creators, like default construct, exist): cannot deserialize from Object value (no delegate- or property-based Creator)
at [Source: UNKNOWN; line: -1, column: -1] (through reference chain: com.example.MyClass["location"])

Поэтому я осмотрелся и обнаружил, что WebTestClientAutoConfigurationа также SpringBootWebTestClientBuilderCustomizer дополнительно настраиваем кодеки.

Изменение инициализации для включения настройщиков устраняет проблему десериализации и работает.

Collection<CodecCustomizer> customizers = context.getBeansOfType(CodecCustomizer.class).values();

SpringBootWebTestClientBuilderCustomizer builderCustomizer = new SpringBootWebTestClientBuilderCustomizer(customizers);
builderCustomizer.customize(builder);
builder.build();

Однако я не знаю, является ли это правильным способом настройки WebTestClient и работает ли он полностью или что-то все еще не работает, я просто еще не обнаружил.

Почему-то я не думаю, что это намеченный путь, и мне хотелось бы знать, как правильно настроить WebTestClient.

0 ответов

Другие вопросы по тегам