如何对带有scala的注解中的数组使用spring表达式语言

z6psavjg  于 2021-06-05  发布在  Kafka
关注(0)|答案(1)|浏览(463)

我有一个简单的scala项目,看起来像这样。。。

@Configuration
public class CommonConfiguration{
    ...
    @Value("${spring.kafka.topic}")
    public String topic;
    ...
}
@Service
class KafkaService @Autowired()(producer: KafkaTemplate[String, Array[Byte]], config: CommonConfiguration){

  def sendMessage(msg: String): Unit = {
    println(s"Writing the message $msg ${config.topic}")
    producer.send(config.topic, msg.getBytes());
  }

  @KafkaListener(id="test", topics="#{'${spring.kafka.topic}'.split(',')}")
  def consume(record: ConsumerRecord[String, String]): Unit = {
    System.out.println(s"Consumed Strinsg Message : ${record.value()}")
  }

}

这给了我一个错误。。。

KafkaService.scala:26: error: type mismatch;
[ERROR]  found   : String("#{\'${spring.kafka.topic}\'.split(\',\')}")
[ERROR]  required: Array[String]
[ERROR]   @KafkaListener(id="test", topics= "#{'${spring.kafka.topic}'.split(',')}")

我试过用 #{'${spring.kafka.topic}'.split(',')} 按照这个建议,但我不能让它工作。制片人很好地理解了这个主题。如何在scala中使用spring表达式语言?
这是工作的java版本。。。

@Service
public class KafkaJavaService {
    @KafkaListener(id="test", topics="#{'${spring.kafka.topic}'.split(',')}")
    public void consume(ConsumerRecord<String, String> record){
        System.out.println("Consumed String Message : "+record.value())
    }
}
0md85ypi

0md85ypi1#

根据这个问题,看起来 topics = Array("...") 应该有用。
阅读 @RequestMapping 文档:http://static.springsource.org/spring/docs/2.5.x/api/org/springframework/web/bind/annotation/requestmapping.html
它接受字符串数组参数作为其路径Map。
所以这是通过java实现的: @RequestMapping("MYVIEW") 但在scala中,我需要使用: @RequestMapping(Array("MYVIEW")) scala版本很有意义,因为注解需要一个字符串数组。但为什么上面的代码在java中工作,难道它不应该给出编译时错误吗?
编辑
这在技术上也是不一样的,因为我可以使用csv。如果数组的构造函数没有什么特别之处,那么即使它工作了,它也将是一个1字符串数组。
这不应该有什么区别;如我所说,如果 String[] 下定决心 String[] ,我们递归地将其分解(展平)。看看这里和这里。
尝试在这些方法中设置断点;我没有安装scala,否则我会看一看。

相关问题