首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有配置SSE编码器,而且数据不是字符串?

没有配置SSE编码器,而且数据不是字符串?
EN

Stack Overflow用户
提问于 2021-08-06 06:54:48
回答 1查看 116关注 0票数 2

org.springframework.core.codec.CodecException:没有配置SSE编码器,且数据不是字符串

在Spring上,我生成了一个只有Spring 的项目。这里是主类,因为我把它变成了REST控制器。

代码语言:javascript
复制
package com.example.demospringwebflux;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Flux;

@RestController
@SpringBootApplication
public class DemoSpringWebfluxApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoSpringWebfluxApplication.class, args);
    }

    @GetMapping("/tuple")
    public Flux<Long> getTuple() {
        return Flux.fromArray(new Long[]{7L, 11L});
    }

}

效果很好。

代码语言:javascript
复制
$ curl 0.0.0.0:8080/tuple
[7,11]

..。直到我按如下方式添加了一个module-info.java

代码语言:javascript
复制
module com.example.demospringwebflux {
    exports com.example.demospringwebflux;

    opens com.example.demospringwebflux;

    requires spring.boot;
    requires spring.boot.autoconfigure;
    requires spring.context;
    requires spring.web;
    requires spring.webflux;

    requires reactor.core;
}

此时,cURL触发运行时异常。

代码语言:javascript
复制
    org.springframework.core.codec.CodecException: No SSE encoder configured and the data is not String.
        at spring.web@5.3.9/org.springframework.http.codec.ServerSentEventHttpMessageWriter.encodeEvent(ServerSentEventHttpMessageWriter.java:171) ~[spring-web-5.3.9.jar:na]
        Suppressed: reactor.core.publisher.FluxOnAssembly$OnAssemblyException: 
    Error has been observed at the following site(s):
        |_ checkpoint ⇢ Handler com.example.demospringwebflux.DemoSpringWebfluxApplication#getTuple() [DispatcherHandler]
        |_ checkpoint ⇢ HTTP GET "/tuple" [ExceptionHandlingWebHandler]
    Stack trace:
            at spring.web@5.3.9/org.springframework.http.codec.ServerSentEventHttpMessageWriter.encodeEvent(ServerSentEventHttpMessageWriter.java:171) ~[spring-web-5.3.9.jar:na]
            at spring.web@5.3.9/org.springframework.http.codec.ServerSentEventHttpMessageWriter.lambda$encode$0(ServerSentEventHttpMessageWriter.java:159) ~[spring-web-5.3.9.jar:na]
            [--- truncated output all from reactor-core ---]
            at reactor.core@3.4.8/reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.8.jar:na]
            at reactor.netty.http@1.0.9/reactor.netty.http.server.HttpServer$HttpServerHandle.onStateChange(HttpServer.java:915) ~[reactor-netty-http-1.0.9.jar:na]
            at reactor.netty.core@1.0.9/reactor.netty.ReactorNetty$CompositeConnectionObserver.onStateChange(ReactorNetty.java:654) ~[reactor-netty-core-1.0.9.jar:na]
            at reactor.netty.core@1.0.9/reactor.netty.transport.ServerTransport$ChildObserver.onStateChange(ServerTransport.java:478) ~[reactor-netty-core-1.0.9.jar:na]
            at reactor.netty.http@1.0.9/reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:517) ~[reactor-netty-http-1.0.9.jar:na]
            at reactor.netty.core@1.0.9/reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:93) ~[reactor-netty-core-1.0.9.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.66.Final.jar:na]
            at reactor.netty.http@1.0.9/reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:208) ~[reactor-netty-http-1.0.9.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.codec@4.1.66.Final/io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[netty-codec-4.1.66.Final.jar:na]
            at io.netty.codec@4.1.66.Final/io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[netty-codec-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport@4.1.66.Final/io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.66.Final.jar:na]
            at io.netty.transport.epoll@4.1.66.Final-linux-x86_64/io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:795) ~[netty-transport-native-epoll-4.1.66.Final-linux-x86_64.jar:na]
            at io.netty.transport.epoll@4.1.66.Final-linux-x86_64/io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:480) ~[netty-transport-native-epoll-4.1.66.Final-linux-x86_64.jar:na]
            at io.netty.transport.epoll@4.1.66.Final-linux-x86_64/io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) ~[netty-transport-native-epoll-4.1.66.Final-linux-x86_64.jar:na]
            at io.netty.common@4.1.66.Final/io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) ~[netty-common-4.1.66.Final.jar:na]
            at io.netty.common@4.1.66.Final/io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.66.Final.jar:na]
            at io.netty.common@4.1.66.Final/io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.66.Final.jar:na]
            at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]

    2021-08-06 10:38:20.468 ERROR 2804492 --- [or-http-epoll-2] o.s.w.s.adapter.HttpWebHandlerAdapter    : [51436638-1] 500 Server Error for HTTP GET "/tuple"

    org.springframework.web.reactive.function.UnsupportedMediaTypeException: Content type 'application/json' not supported for bodyType=java.util.LinkedHashMap<?, ?>
        at spring.webflux@5.3.9/org.springframework.web.reactive.function.BodyInserters.unsupportedError(BodyInserters.java:391) ~[spring-webflux-5.3.9.jar:na]
        at spring.webflux@5.3.9/org.springframework.web.reactive.function.BodyInserters.lambda$writeWithMessageWriters$11(BodyInserters.java:381) ~[spring-webflux-5.3.9.jar:na]
        at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na]
        at spring.webflux@5.3.9/org.springframework.web.reactive.function.BodyInserters.writeWithMessageWriters(BodyInserters.java:381) ~[spring-webflux-5.3.9.jar:na]
        at spring.webflux@5.3.9/org.springframework.web.reactive.function.BodyInserters.lambda$fromValue$1(BodyInserters.java:98) ~[spring-webflux-5.3.9.jar:na]
        at spring.webflux@5.3.9/org.springframework.web.reactive.function.server.DefaultServerResponseBuilder$BodyInserterResponse.writeToInternal(DefaultServerResponseBuilder.java:409) ~[spring-webflux-5.3.9.jar:na]
        at spring.webflux@5.3.9/org.springframework.web.reactive.function.server.DefaultServerResponseBuilder$AbstractServerResponse.writeTo(DefaultServerResponseBuilder.java:351) ~[spring-webflux-5.3.9.jar:na]
        at spring.boot.autoconfigure@2.5.3/org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler.write(AbstractErrorWebExceptionHandler.java:375) ~[spring-boot-autoconfigure-2.5.3.jar:na]
        at spring.boot.autoconfigure@2.5.3/org.springframework.boot.autoconfigure.web.reactive.error.AbstractErrorWebExceptionHandler.lambda$handle$2(AbstractErrorWebExceptionHandler.java:328) ~[spring-boot-autoconfigure-2.5.3.jar:na]
        [--- truncated output all from reactor-core ---]
        at reactor.core@3.4.8/reactor.core.publisher.InternalMonoOperator.subscribe(InternalMonoOperator.java:64) ~[reactor-core-3.4.8.jar:na]
        at reactor.netty.http@1.0.9/reactor.netty.http.server.HttpServer$HttpServerHandle.onStateChange(HttpServer.java:915) ~[reactor-netty-http-1.0.9.jar:na]
        at reactor.netty.core@1.0.9/reactor.netty.ReactorNetty$CompositeConnectionObserver.onStateChange(ReactorNetty.java:654) ~[reactor-netty-core-1.0.9.jar:na]
        at reactor.netty.core@1.0.9/reactor.netty.transport.ServerTransport$ChildObserver.onStateChange(ServerTransport.java:478) ~[reactor-netty-core-1.0.9.jar:na]
        at reactor.netty.http@1.0.9/reactor.netty.http.server.HttpServerOperations.onInboundNext(HttpServerOperations.java:517) ~[reactor-netty-http-1.0.9.jar:na]
        at reactor.netty.core@1.0.9/reactor.netty.channel.ChannelOperationsHandler.channelRead(ChannelOperationsHandler.java:93) ~[reactor-netty-core-1.0.9.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.66.Final.jar:na]
        at reactor.netty.http@1.0.9/reactor.netty.http.server.HttpTrafficHandler.channelRead(HttpTrafficHandler.java:208) ~[reactor-netty-http-1.0.9.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelRead(CombinedChannelDuplexHandler.java:436) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.codec@4.1.66.Final/io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[netty-codec-4.1.66.Final.jar:na]
        at io.netty.codec@4.1.66.Final/io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[netty-codec-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.CombinedChannelDuplexHandler.channelRead(CombinedChannelDuplexHandler.java:251) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport@4.1.66.Final/io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-transport-4.1.66.Final.jar:na]
        at io.netty.transport.epoll@4.1.66.Final-linux-x86_64/io.netty.channel.epoll.AbstractEpollStreamChannel$EpollStreamUnsafe.epollInReady(AbstractEpollStreamChannel.java:795) ~[netty-transport-native-epoll-4.1.66.Final-linux-x86_64.jar:na]
        at io.netty.transport.epoll@4.1.66.Final-linux-x86_64/io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:480) ~[netty-transport-native-epoll-4.1.66.Final-linux-x86_64.jar:na]
        at io.netty.transport.epoll@4.1.66.Final-linux-x86_64/io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:378) ~[netty-transport-native-epoll-4.1.66.Final-linux-x86_64.jar:na]
        at io.netty.common@4.1.66.Final/io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) ~[netty-common-4.1.66.Final.jar:na]
        at io.netty.common@4.1.66.Final/io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.66.Final.jar:na]
        at io.netty.common@4.1.66.Final/io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.66.Final.jar:na]
        at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]

我还没有弄明白为什么Java模块会禁用bean。或者这可能是个bug,我应该在GitHub上报告它?

EN

回答 1

Stack Overflow用户

发布于 2021-08-06 07:52:06

@M. Deinum的评论让我尝试了一些不同的东西。还有瞧..。

我的应用程序使用下面的module-info.java启动并运行得很好

代码语言:javascript
复制
module com.example.demospringwebflux {
    exports com.example.demospringwebflux;

    opens com.example.demospringwebflux;

    requires spring.boot;
    requires spring.boot.autoconfigure;
    requires spring.web;

    requires com.fasterxml.jackson.core; // ADDITION LINE
    requires reactor.core;
}

(我删除了其他模块,以确保它们不需要,而且仍然有效。)

谢谢,先生!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68677381

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档