I have a Java class that configure the embebed tomcat of Spring Boot 2.0.6 for use HTTP2 protocol:
package com.talleres.paco.mako.config;
import org.apache.catalina.connector.Connector;
import org.apache.coyote.http2.Http2Protocol;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class TomcatHttp2Config {
@Bean
public ConfigurableServletWebServerFactory tomcatCustomizer() {
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addConnectorCustomizers((Connector connector) -> {
connector.addUpgradeProtocol(new Http2Protocol());
});
return factory;
}
}
When I use IntelliJ for convert this snippet code to Kotlin I obtain a compilation error. Here is the Kotlin code that IntelliJ return:
package com.talleres.paco.mako.config
import org.apache.catalina.connector.Connector
import org.apache.coyote.http2.Http2Protocol
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory
import org.springframework.boot.web.servlet.server.ConfigurableServletWebServerFactory
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
@Configuration
class TomcatHttp2Config {
@Bean
fun tomcatCustomizer(): ConfigurableServletWebServerFactory {
val factory = TomcatServletWebServerFactory()
factory.addConnectorCustomizers({ connector: Connector -> connector.addUpgradeProtocol(Http2Protocol()) })
return factory
}
}
I obtain this error:
Type mismatch.
Required:
TomcatConnectorCustomizer!
Found:
(Connector) → Unit
At line that appears the lambda:
factory.addConnectorCustomizers({ connector: Connector -> connector.addUpgradeProtocol(Http2Protocol()) })
How I can translate the Java code above to Kotlin. Thanks in advance.
You could look into SAM conversions for Kotlin.
If for some reason the version with the method doesn't work
factory.addConnectorCustomizers { it.addUpgradeProtocol(Http2Protocol()) }
You can try to implement the Java interface easily as
factory.addConnectorCustomizers(TomcatConnectorCustomizer { it.addUpgradeProtocol(Http2Protocol()) })