英文:
class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')
问题
Trying to use ReplyingKafkaTemplate to return the response from the service, but keep getting an error `java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')`# Listener@KafkaListener(id = ProductTopicConstants.GET_PRODUCTS, topics = ProductTopicConstants.GET_PRODUCTS, splitIterables = false)@SendTopublic List<Product> GetProducts(@Payload(required = false) String payload) {List<Product> products = _productRepository.findAll();return new ArrayList<>(products);}# KafkaConfiguration@Configurationpublic class KafkaConfiguration {@Beanpublic ReplyingKafkaTemplate<String, String, List<Product>> replyer(ProducerFactory<String, String> pf,ConcurrentKafkaListenerContainerFactory<String, List<Product>> containerFactory) {containerFactory.setReplyTemplate(kafkaTemplate(pf));ConcurrentMessageListenerContainer<String, List<Product>> container = replyContainer(containerFactory);ReplyingKafkaTemplate<String, String, List<Product>> replyer = new ReplyingKafkaTemplate<>(pf, container);return replyer;}@Beanpublic ConcurrentMessageListenerContainer<String, List<Product>> replyContainer(ConcurrentKafkaListenerContainerFactory<String, List<Product>> containerFactory) {ConcurrentMessageListenerContainer<String, List<Product>> container =containerFactory.createContainer(ProductTopicConstants.GET_PRODUCTS_CONTAINER);container.getContainerProperties().setGroupId(ProductTopicConstants.GET_PRODUCTS_CONTAINER);container.setBatchErrorHandler(new BatchLoggingErrorHandler());return container;}@Beanpublic KafkaTemplate<String, String> kafkaTemplate(ProducerFactory<String, String> pf) {return new KafkaTemplate<>(pf);}@Beanpublic NewTopic GetProducts() {return TopicBuilder.name(ProductTopicConstants.GET_PRODUCTS).partitions(1).replicas(1).build();}@Beanpublic NewTopic GetProductsContainer() {return TopicBuilder.name(ProductTopicConstants.GET_PRODUCTS_CONTAINER).partitions(1).replicas(1).build();}}# service@Servicepublic class ProductProducer implements IProductProducer {private final ReplyingKafkaTemplate<String, String, List<Product>> _replyTemplate;private static final Logger LOG = LoggerFactory.getLogger(ProductProducer.class);public ProductProducer(ReplyingKafkaTemplate<String, String, List<Product>> replyTemplate) {this._replyTemplate = replyTemplate;}@Overridepublic List<ProductViewModel> GetProducts() throws InterruptedException, ExecutionException, TimeoutException {RequestReplyFuture<String, String, List<Product>> future =this._replyTemplate.sendAndReceive(new ProducerRecord<>(ProductTopicConstants.GET_PRODUCTS, 0, null, null));LOG.info(future.getSendFuture().get(10, TimeUnit.SECONDS).getRecordMetadata().toString());List<Product> value = future.get(10, TimeUnit.SECONDS).value(); --> Getting an error over herereturn List.of(new ProductViewModel("", "", 0, ""));}}# ErrorGetting an error over here `List<Product> value = future.get(10, TimeUnit.SECONDS).value();`java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')at fete.bird.fetebirdproduct.service.producer.ProductProducer.GetProducts(ProductProducer.java:40) ~[main/:na]...
(代码部分已经翻译完毕,以下内容不再包含翻译。)
英文:
Trying to use ReplyingKafkaTemplate to return the response from the service, but keep getting an error java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')
Listener
@KafkaListener(id = ProductTopicConstants.GET_PRODUCTS, topics = ProductTopicConstants.GET_PRODUCTS,splitIterables = false)@SendTopublic List<Product> GetProducts(@Payload(required = false) String payload) {List<Product> products = _productRepository.findAll();return new ArrayList<>(products);}
KafkaConfiguration
@Configurationpublic class KafkaConfiguration {@Beanpublic ReplyingKafkaTemplate<String, String, List<Product>> replyer(ProducerFactory<String, String> pf,ConcurrentKafkaListenerContainerFactory<String, List<Product>> containerFactory) {containerFactory.setReplyTemplate(kafkaTemplate(pf));ConcurrentMessageListenerContainer<String, List<Product>> container = replyContainer(containerFactory);ReplyingKafkaTemplate<String, String, List<Product>> replyer = new ReplyingKafkaTemplate<>(pf, container);return replyer;}@Beanpublic ConcurrentMessageListenerContainer<String, List<Product>> replyContainer(ConcurrentKafkaListenerContainerFactory<String, List<Product>> containerFactory) {ConcurrentMessageListenerContainer<String, List<Product>> container =containerFactory.createContainer(ProductTopicConstants.GET_PRODUCTS_CONTAINER);container.getContainerProperties().setGroupId(ProductTopicConstants.GET_PRODUCTS_CONTAINER);container.setBatchErrorHandler(new BatchLoggingErrorHandler());return container;}@Beanpublic KafkaTemplate<String, String> kafkaTemplate(ProducerFactory<String, String> pf) {return new KafkaTemplate<>(pf);}@Beanpublic NewTopic GetProducts() {return TopicBuilder.name(ProductTopicConstants.GET_PRODUCTS).partitions(1).replicas(1).build();}@Beanpublic NewTopic GetProductsContainer() {return TopicBuilder.name(ProductTopicConstants.GET_PRODUCTS_CONTAINER).partitions(1).replicas(1).build();}}
service
@Servicepublic class ProductProducer implements IProductProducer{private final ReplyingKafkaTemplate<String, String, List<Product>> _replyTemplate;private static final Logger LOG = LoggerFactory.getLogger(ProductProducer.class);public ProductProducer(ReplyingKafkaTemplate<String, String, List<Product>> replyTemplate) {this._replyTemplate = replyTemplate;}@Overridepublic List<ProductViewModel> GetProducts() throws InterruptedException, ExecutionException, TimeoutException {RequestReplyFuture<String, String, List<Product>> future =this._replyTemplate.sendAndReceive(new ProducerRecord<>(ProductTopicConstants.GET_PRODUCTS, 0, null, null));LOG.info(future.getSendFuture().get(10, TimeUnit.SECONDS).getRecordMetadata().toString());List<Product> value = future.get(10, TimeUnit.SECONDS).value(); --> Getting an error over herereturn List.of(new ProductViewModel("","",0,""));}}
Error
Getting an error over here List<Product> value = future.get(10, TimeUnit.SECONDS).value();
java.lang.ClassCastException: class java.lang.String cannot be cast to class java.util.List (java.lang.String and java.util.List are in module java.base of loader 'bootstrap')at fete.bird.fetebirdproduct.service.producer.ProductProducer.GetProducts(ProductProducer.java:40) ~[main/:na]at fete.bird.fetebirdproduct.api.v1.controller.ProductController.Products(ProductController.java:43) ~[main/:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:879) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:793) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]at javax.servlet.http.HttpServlet.service(HttpServlet.java:634) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.2.7.RELEASE.jar:5.2.7.RELEASE]at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.36.jar:9.0.36]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.springframework.boot.actuate.metrics.web.servlet.WebMvcMetricsFilter.doFilterInternal(WebMvcMetricsFilter.java:93) ~[spring-boot-actuator-2.3.1.RELEASE.jar:2.3.1.RELEASE]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.2.7.RELEASE.jar:5.2.7.RELEASE]at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:541) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:373) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.36.jar:9.0.36]at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
Configuration
spring:profiles:active: devkafka:bootstrapAddress: localhost:9092producer:key-serializer: org.springframework.kafka.support.serializer.JsonSerializervalue-serializer: org.springframework.kafka.support.serializer.JsonSerializerconsumer:key-deserializer: org.springframework.kafka.support.serializer.JsonDeserializervalue-deserializer: org.springframework.kafka.support.serializer.JsonDeserializerauto-offset-reset: earliestproperties:spring:json:trusted:packages: *
答案1
得分: 1
我在包名前缺少 '*'spring:profiles:active: devkafka:bootstrapAddress: localhost:9092producer:key-serializer: org.springframework.kafka.support.serializer.JsonSerializervalue-serializer: org.springframework.kafka.support.serializer.JsonSerializerconsumer:key-deserializer: org.springframework.kafka.support.serializer.JsonDeserializervalue-deserializer: org.springframework.kafka.support.serializer.JsonDeserializerauto-offset-reset: earliestproperties:spring:json:trusted:packages: '*'
英文:
I was missing '*' at the package
spring:profiles:active: devkafka:bootstrapAddress: localhost:9092producer:key-serializer: org.springframework.kafka.support.serializer.JsonSerializervalue-serializer: org.springframework.kafka.support.serializer.JsonSerializerconsumer:key-deserializer: org.springframework.kafka.support.serializer.JsonDeserializervalue-deserializer: org.springframework.kafka.support.serializer.JsonDeserializerauto-offset-reset: earliestproperties:spring:json:trusted:packages: '*'
专注分享java语言的经验与见解,让所有开发者获益!

评论