UnsupportedMediaTypeException: Content type 'application/json' not supported for bodyType
fragaLY opened this issue · 2 comments
fragaLY commented
Hello, Spring-Native team and ambassadors.
I've faced a problem related to supported media types.
In not native solution in works correctly. Absolutely no changes in the code base. I have only changes related to Gradle setup of AOT and etc.
2022-09-27 19:06:24.296 ERROR 1 --- [ctor-http-nio-2] a.w.r.e.AbstractErrorWebExceptionHandler : [29c49536-2] 500 Server Error for HTTP GET "/countries"
org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'application/json' not supported for bodyType=by.vk.springbootreactivenative.location.responses.CountryResponse
at org.springframework.web.reactive.function.BodyInserters.unsupportedError(BodyInserters.java:391) ~[na:na]
Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException:
Error has been observed at the following site(s):
*__checkpoint ? Handler by.vk.springbootreactivenative.configuration.A2BConfiguration$$Lambda$9294901dc611cc3059b446732514d373f6686872@3fcee7c7 [DispatcherHandler]
*__checkpoint ? HTTP GET "/api/v1/countries" [ExceptionHandlingWebHandler]
Original Stack Trace:
at org.springframework.web.reactive.function.BodyInserters.unsupportedError(BodyInserters.java:391) ~[na:na]
at org.springframework.web.reactive.function.BodyInserters.lambda$writeWithMessageWriters$11(BodyInserters.java:381) ~[na:na]
at java.util.Optional.orElseGet(Optional.java:364) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:na]
at org.springframework.web.reactive.function.BodyInserters.writeWithMessageWriters(BodyInserters.java:381) ~[na:na]
at org.springframework.web.reactive.function.BodyInserters.lambda$fromPublisher$4(BodyInserters.java:185) ~[na:na]
at org.springframework.web.reactive.function.server.DefaultEntityResponseBuilder$DefaultEntityResponse.writeToInternal(DefaultEntityResponseBuilder.java:233) ~[na:na]
at org.springframework.web.reactive.function.server.DefaultServerResponseBuilder$AbstractServerResponse.writeTo(DefaultServerResponseBuilder.java:351) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:5.3.23]
at org.springframework.web.reactive.function.server.support.ServerResponseResultHandler.handleResult(ServerResponseResultHandler.java:94) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:5.3.23]
at org.springframework.web.reactive.DispatcherHandler.handleResult(DispatcherHandler.java:179) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:5.3.23]
at org.springframework.web.reactive.DispatcherHandler.lambda$handle$2(DispatcherHandler.java:154) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:5.3.23]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:125) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.Operators$MonoSubscriber.complete(Operators.java:1816) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoFlatMap$FlatMapInner.onNext(MonoFlatMap.java:249) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) ~[na:na]
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) ~[na:na]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onNext(FluxMapFuseable.java:129) ~[na:na]
at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2398) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.request(FluxMapFuseable.java:171) ~[na:na]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2194) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2068) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxMapFuseable$MapFuseableSubscriber.onSubscribe(FluxMapFuseable.java:96) ~[na:na]
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) ~[na:na]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoFlatMap$FlatMapMain.onNext(MonoFlatMap.java:157) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxSwitchIfEmpty$SwitchIfEmptySubscriber.onNext(FluxSwitchIfEmpty.java:74) ~[na:na]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.innerNext(FluxConcatMap.java:282) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatMap$ConcatMapInner.onNext(FluxConcatMap.java:863) ~[na:na]
at reactor.core.publisher.FluxMap$MapSubscriber.onNext(FluxMap.java:122) ~[na:na]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onNext(FluxPeek.java:200) ~[na:na]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:201) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:201) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:201) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:201) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:201) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:201) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:201) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:201) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onNext(MonoNext.java:82) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onNext(FluxConcatArray.java:201) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.Operators$ScalarSubscription.request(Operators.java:2398) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.request(FluxConcatArray.java:276) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:108) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.request(FluxConcatArray.java:276) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:108) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.request(FluxConcatArray.java:276) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:108) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.request(FluxConcatArray.java:276) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:108) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.request(FluxConcatArray.java:276) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:108) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.request(FluxConcatArray.java:276) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:108) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.request(FluxConcatArray.java:276) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:108) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.request(FluxConcatArray.java:276) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:108) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.request(FluxConcatArray.java:276) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.request(MonoNext.java:108) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxPeek$PeekSubscriber.request(FluxPeek.java:138) ~[na:na]
at reactor.core.publisher.FluxMap$MapSubscriber.request(FluxMap.java:164) ~[na:na]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.set(Operators.java:2194) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.Operators$MultiSubscriptionSubscriber.onSubscribe(Operators.java:2068) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxMap$MapSubscriber.onSubscribe(FluxMap.java:92) ~[na:na]
at reactor.core.publisher.FluxPeek$PeekSubscriber.onSubscribe(FluxPeek.java:171) ~[na:na]
at reactor.core.publisher.MonoNext$NextSubscriber.onSubscribe(MonoNext.java:70) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onSubscribe(FluxConcatArray.java:187) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onSubscribe(MonoNext.java:70) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onSubscribe(FluxConcatArray.java:187) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onSubscribe(MonoNext.java:70) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onSubscribe(FluxConcatArray.java:187) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onSubscribe(MonoNext.java:70) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onSubscribe(FluxConcatArray.java:187) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onSubscribe(MonoNext.java:70) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onSubscribe(FluxConcatArray.java:187) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onSubscribe(MonoNext.java:70) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onSubscribe(FluxConcatArray.java:187) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onSubscribe(MonoNext.java:70) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onSubscribe(FluxConcatArray.java:187) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onSubscribe(MonoNext.java:70) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onSubscribe(FluxConcatArray.java:187) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoNext$NextSubscriber.onSubscribe(MonoNext.java:70) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onSubscribe(FluxConcatArray.java:187) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoJust.subscribe(MonoJust.java:55) ~[na:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4455) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:258) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:78) ~[na:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4455) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:258) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:78) ~[na:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4455) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:258) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:78) ~[na:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4455) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:258) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:78) ~[na:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4455) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:258) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:78) ~[na:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4455) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:258) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:78) ~[na:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4455) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:258) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:78) ~[na:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4455) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:258) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:78) ~[na:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4455) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray$ConcatArraySubscriber.onComplete(FluxConcatArray.java:258) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatArray.subscribe(FluxConcatArray.java:78) ~[na:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4455) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.drain(FluxConcatMap.java:451) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxConcatMap$ConcatMapImmediate.onSubscribe(FluxConcatMap.java:219) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:165) ~[na:na]
at reactor.core.publisher.FluxIterable.subscribe(FluxIterable.java:87) ~[na:na]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoDefer.subscribe(MonoDefer.java:52) ~[na:na]
at reactor.core.publisher.Mono.subscribe(Mono.java:4455) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoIgnoreThen$ThenIgnoreMain.subscribeNext(MonoIgnoreThen.java:263) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoIgnoreThen.subscribe(MonoIgnoreThen.java:51) ~[na:na]
at reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:3.4.23]
at reactor.core.publisher.MonoDeferContextual.subscribe(MonoDeferContextual.java:55) ~[na:na]
at reactor.netty.http.server.HttpServer$HttpServerHandle.onStateChange(HttpServer.java:967) ~[na:na]
at reactor.netty.ReactorNetty$CompositeConnectionObserver.onStateChange(ReactorNetty.java:677) ~[na:na]
at reactor.netty.transport.ServerTransport$ChildObserver.onStateChange(ServerTransport.java:475) ~[na:na]
at reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:570) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:1.0.23]
at reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:93) ~[na:na]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:214) ~[na:na]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:336) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:308) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[na:na]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:166) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:4.1.82.Final]
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788) ~[na:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724) ~[na:na]
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650) ~[na:na]
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562) ~[na:na]
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997) ~[na:na]
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[na:na]
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[na:na]
at java.lang.Thread.run(Thread.java:833) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:na]
at com.oracle.svm.core.thread.PlatformThreads.threadStartRoutine(PlatformThreads.java:705) ~[by.vk.springbootreactivenative.SpringBootReactiveNativeApplication:na]
at com.oracle.svm.core.posix.thread.PosixPlatformThreads.pthreadStartRoutine(PosixPlatformThreads.java:202) ~[na:na]
Code samples:
@Bean
public RouterFunction<ServerResponse> route(LocationHandler location) {
return RouterFunctions
.route(GET("/countries").and(accept(APPLICATION_JSON)), location::countries);
}
...
@Component
public record LocationHandler(CountryRepository countryRepository ) {
public Mono<ServerResponse> countries(ServerRequest request) {
return ServerResponse
.ok()
.contentType(MediaType.APPLICATION_JSON)
.body(countryRepository.findAll().mapNotNull(CountryResponse::from), CountryResponse.class)
.switchIfEmpty(ServerResponse.notFound().build());
}
}
public interface CountryRepository extends R2dbcRepository<Country, Long> {
}
server:
compression:
enabled: true
spring:
main:
banner-mode: off
web-application-type: reactive
cache:
type: none
webflux:
base-path: "api/v1/"
r2dbc:
url: "r2dbc:postgresql://localhost:5433/a2b" # for docker "r2dbc:postgresql://postgres-a2b:5432/a2b"
username: "postgres"
password: "postgres"
properties:
schema: "a2b"
management:
health:
livenessstate:
enabled: true
readinessstate:
enabled: true
endpoint:
health:
enabled: true
probes:
enabled: true
show-components: never
show-details: never
group:
readiness:
include: readinessState, db
metrics.enabled: true
prometheus.enabled: true
endpoints.web.exposure.include: "*"
metrics.export.prometheus.enabled: true
logging.level:
ROOT: info
by.vk.springbootreactive: info
org.springframework: info
All the sources you could find there: https://github.com/fragaLY/performance-researches/tree/master/spring-boot-reactive-native
fragaLY commented
In addition, right now after the second bootBuildImage:
2022-09-28 13:36:14.696 DEBUG 1 --- [ctor-http-nio-4] o.s.w.s.adapter.HttpWebHandlerAdapter : [e301f6d9-3] HTTP GET "/api/v1/countries"
2022-09-28 13:36:14.696 DEBUG 1 --- [ctor-http-nio-4] o.s.w.r.handler.SimpleUrlHandlerMapping : [e301f6d9-3] Mapped to ResourceWebHandler [classpath [META-INF/resources/], classpath [resources/], classpath [static/], classpath [public/]]
sdeleuze commented
It is due to missing reflection entries Spring Native can't detect because used in the body of the method. You can fix this by adding @TypeHint(types = CountryResponse.class, access = { TypeAccess.DECLARED_METHODS, TypeAccess.DECLARED_FIELDS })
to the application class.