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.