Очевидно, jackson-dataformat-xml
еще не поддерживает XML Marshalling в WebFlux. На данный момент я вижу две возможности:
- Либо добавьте
org.springframework.boot:spring-boot-starter-web
в путь к классам (должно быть и starter-web и starter-webflux ). Однако это будет работать только с средами выполнения Servlet 3.1 (например, Tomcat).
- Или, если вам нужен полноценный реактивный веб-сервер (например, Netty) , используйте XML-сортировку из JAXB (
Jaxb2XmlEncoder
и Jaxb2XmlDecoder
):
build.gradle
sourceCompatibility = '11'
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-webflux'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// Java 11 removed these Java EE modules
implementation "javax.xml.bind:jaxb-api:2.3.1"
implementation "com.sun.xml.bind:jaxb-core:2.3.0.1"
implementation "com.sun.xml.bind:jaxb-impl:2.3.2"
compileOnly "org.projectlombok:lombok"
annotationProcessor "org.projectlombok:lombok"
}
POJO :
@Data
@AllArgsConstructor
@NoArgsConstructor
@XmlRootElement
public class Datta {
private String title;
}
Помните о зависимостях 3 javax.xml.bind
(они вам не нужны для Java 8
) и аннотации @XmlRootElement
. Это решение работает сразу, однако, если вам нужна дополнительная настройка, внедрите собственный WebFluxConfigurer
:
@Configuration
@EnableWebFlux
public class WebConfig implements WebFluxConfigurer {
@Override
public void configureHttpMessageCodecs(ServerCodecConfigurer configurer) {
configurer.registerDefaults(false);
configurer.customCodecs().decoder(new Jaxb2XmlDecoder()); // <- here
configurer.customCodecs().encoder(new Jaxb2XmlEncoder()); // <- here
}
}
Здесь - ссылка на исходный код.