Я пытаюсь воспроизвести некоторый пример кода, подобный этому:
@GetMapping("/unsupport")
public Mono<Void> unsupport(ServerWebExchange exchange) {
return exchange.getResponse().writeWith(Mono.just(exchange.getResponse().bufferFactory().wrap("unsupport".getBytes(StandardCharsets.UTF_8))));
}
А потом я получил UnsupportedOperationException со стеком ниже:
в java.util.Collections $ UnmodifiableMap.put (Неизвестный источник) в
org.springframework.http.HttpHeaders.set (HttpHeaders.java:1451) в
org.springframework.http.HttpHeaders.setContentType (HttpHeaders.java:854)
в
org.springframework.http.codec.EncoderHttpMessageWriter.updateContentType (EncoderHttpMessageWriter.java:132)
в
org.springframework.http.codec.EncoderHttpMessageWriter.write (EncoderHttpMessageWriter.java:100)
в
org.springframework.http.codec.EncoderHttpMessageWriter.write (EncoderHttpMessageWriter.java:167)
в
org.springframework.web.reactive.result.method.annotation.AbstractMessageWriterResultHandler.writeBody (AbstractMessageWriterResultHandler.java:146)
в
org.springframework.web.reactive.result.method.annotation.ResponseEntityResultHandler.lambda $ handleResult $ 2 (ResponseEntityResultHandler.java:174)
в
reactor.core.publisher.FluxFlatMap.trySubscribeScalarMap (FluxFlatMap.java:141)
at реактор.core.publisher.MonoFlatMap.subscribe (MonoFlatMap.java:53)
в
reactor.core.publisher.MonoOnErrorResume.subscribe (MonoOnErrorResume.java:44)
в
reactor.core.publisher.MonoFlatMap $ FlatMapMain.onNext (MonoFlatMap.java:150)
в
reactor.core.publisher.Operators $ MonoSubscriber.complete (Operators.java:1080)
в
reactor.core.publisher.MonoFlatMap $ FlatMapInner.onNext (MonoFlatMap.java:241)
в
reactor.core.publisher.FluxOnErrorResume $ ResumeSubscriber.onNext (FluxOnErrorResume.java:73)
в
reactor.core.publisher.Operators $ MonoSubscriber.complete (Operators.java:1080)
в
reactor.core.publisher.MonoFlatMap $ FlatMapMain.onNext (MonoFlatMap.java:144)
в
reactor.core.publisher.Operators $ MonoSubscriber.complete (Operators.java:1080)
в
reactor.core.publisher.MonoZip $ ZipCoordinator.signal (MonoZip.java:241)
at processor.core.publisher.MonoZip $ ZipInner.onNext (MonoZip.java:323)
в
reactor.core.publisher.Operators $ ScalarSubscription.request (Operators.java:1637)
в
reactor.core.publisher.MonoZip $ ZipInner.onSubscribe (MonoZip.java:312)
at реактор.кор.публикатор.МоноJust.subscribe (MonoJust.java:54) в
processor.core.publisher.Mono.subscribe (Mono.java:3080) в
processor.core.publisher.MonoZip.subscribe (MonoZip.java:128) в
processor.core.publisher.MonoFlatMap.subscribe (MonoFlatMap.java:60) в
processor.core.publisher.Mono.subscribe (Mono.java:3080) в
reactor.core.publisher.FluxOnErrorResume $ ResumeSubscriber.onError (FluxOnErrorResume.java:97)
в
reactor.core.publisher.FluxPeekFuseable $ PeekFuseableSubscriber.onError (FluxPeekFuseable.java:222)
в
reactor.core.publisher.FluxPeekFuseable $ PeekFuseableSubscriber.onError (FluxPeekFuseable.java:222)
в
reactor.core.publisher.Operators $ MonoSubscriber.onError (Operators.java:1123)
в
reactor.core.publisher.MonoIgnoreThen $ ThenAcceptInner.onError (MonoIgnoreThen.java:300)
в
reactor.core.publisher.MonoFlatMap $ FlatMapMain.secondError (MonoFlatMap.java:185)
в
reactor.core.publisher.MonoFlatMap $ FlatMapInner.onError (MonoFlatMap.java:251)
в
reactor.core.publisher.MonoIgnoreThen $ ThenIgnoreMain.drain (MonoIgnoreThen.java:133)
в
reactor.core.publisher.MonoIgnoreThen $ ThenIgnoreMain.ignoreDone (MonoIgnoreThen.java:185)
в
reactor.core.publisher.MonoIgnoreThen $ ThenIgnoreInner.onComplete (MonoIgnoreThen.java:234)
в
org.springframework.http.server.reactive.ChannelSendOperator $ WriteCompletionBarrier.onComplete (ChannelSendOperator.java:373)
в
reactor.core.publisher.MonoIgnoreElements $ IgnoreElementsSubscriber.onComplete (MonoIgnoreElements.java:80)
в
reactor.core.publisher.FluxConcatIterable $ ConcatIterableSubscriber.onComplete (FluxConcatIterable.java:115)
в
reactor.core.publisher.MonoNext $ NextSubscriber.onComplete (MonoNext.java:96)
вorg.springframework.http.server.reactive.WriteResultPublisher $ State.publishComplete (WriteResultPublisher.java:229)
в
org.springframework.http.server.reactive.WriteResultPublisher.publishComplete (WriteResultPublisher.java:69)
в
org.springframework.http.server.reactive.AbstractListenerWriteFlushProcessor $ State $ 3.writeComplete (AbstractListenerWriteFlushProcessor.java:250)
в
org.springframework.http.server.reactive.AbstractListenerWriteFlushProcessor $ State $ WriteResultSubscriber.onComplete (AbstractListenerWriteFlushProcessor.java:374)
в
org.springframework.http.server.reactive.WriteResultPublisher $ State.publishComplete (WriteResultPublisher.java:229)
в
org.springframework.http.server.reactive.WriteResultPublisher.publishComplete (WriteResultPublisher.java:69)
в
org.springframework.http.server.reactive.AbstractListenerWriteProcessor.changeStateToComplete (AbstractListenerWriteProcessor.java:209)
в
org.springframework.http.server.reactive.AbstractListenerWriteProcessor.access $ 400 (AbstractListenerWriteProcessor.java:44)
в
org.springframework.http.server.reactive.AbstractListenerWriteProcessor $ State $ 3.onWritePossible (AbstractListenerWriteProcessor.java:289)
в
org.springframework.http.server.reactive.AbstractListenerWriteProcessor.onWritePossible (AbstractListenerWriteProcessor.java:103)
в
org.springframework.http.server.reactive.ServletServerHttpResponse $ ResponseBodyWriteListener.onWritePossible (ServletServerHttpResponse.java:238)
в org.apache.coyote.Response.onWritePossible (Response.java:700) в
org.apache.catalina.connector.CoyoteAdapter.asyncDispatch (CoyoteAdapter.java:188)
в
org.apache.coyote.AbstractProcessor.dispatch (AbstractProcessor.java:232)
в
org.apache.coyote.AbstractProcessorLight.process (AbstractProcessorLight.java:49)
в
org.apache.coyote.AbstractProtocol $ ConnectionHandler.process (AbstractProtocol.java:790)
в
org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun (NioEndpoint.java:1468)
в
org.apache.tomcat.util.net.SocketProcessorBase.run (SocketProcessorBase.java:49)
в java.util.concurrent.ThreadPoolExecutor.runWorker (Неизвестный источник)
в java.util.concurrent.ThreadPoolExecutor $ Worker.run (неизвестный источник)
в
org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable.run (TaskThread.java:61)
at java.lang.Thread.run (неизвестный источник)
HttpHeaders создается неизменным образом.
Я что-то не так делаю или это ошибка?
Спасибо
Leon