Spring boot Spring Boot Kotlin Jersey ModelValidationException

Spring boot Spring Boot Kotlin Jersey ModelValidationException,spring-boot,jersey,kotlin,Spring Boot,Jersey,Kotlin,我正试图让Spring Boot+Jersey与Kotlin合作。我按照Java中通常的配置方式进行了配置,但得到了以下stacktrace。这似乎表明控制器被实例化了两次,但不应该 这是我的JerseyConfig课程: package com.joescodeshack.igdb.config import com.fasterxml.jackson.module.kotlin.KotlinModule import com.joescodeshack.igdb.controller.Ge

我正试图让Spring Boot+Jersey与Kotlin合作。我按照Java中通常的配置方式进行了配置,但得到了以下stacktrace。这似乎表明控制器被实例化了两次,但不应该

这是我的JerseyConfig课程:

package com.joescodeshack.igdb.config

import com.fasterxml.jackson.module.kotlin.KotlinModule
import com.joescodeshack.igdb.controller.GenreController
import org.glassfish.jersey.server.ResourceConfig
import org.springframework.context.annotation.Bean
import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder
import org.springframework.stereotype.Component
import javax.ws.rs.ApplicationPath

@Component
@ApplicationPath("/api")
open class JerseyConfig : ResourceConfig {

    constructor() {
        register(GenreController());
    }

    @Bean
    open fun objectMapperBuilder(): Jackson2ObjectMapperBuilder
            = Jackson2ObjectMapperBuilder().modulesToInstall(KotlinModule())
}
GenreController(JAX-RS端点)

package com.joescodeshack.igdb.controller
导入com.joescodeshack.igdb.domain.Genre
导入javax.ws.rs.GET
导入javax.ws.rs.Path
导入javax.ws.rs.products
导入javax.ws.rs.core.MediaType
导入javax.ws.rs.core.Response
@路径(“/类型”)
开放类发电机控制器{
val流派:列表=列表(流派(1,“屁股”)、流派(2,“牛”))
@得到
@产生(MediaType.APPLICATION_JSON)
打开fun getGenres():响应{
返回Response.ok(genres.build();
}
}
堆栈跟踪:

2016-09-06 15:26:26.529 ERROR 17332 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[.[.j.i.c.JerseyConfig]    : Allocate exception for servlet com.joescodeshack.igdb.config.JerseyConfig

org.glassfish.jersey.server.model.ModelValidationException: Validation of the application resource model has failed during application initialization.
[[FATAL] A resource model has ambiguous (sub-)resource method for HTTP method GET and input mime-types as defined by"@Consumes" and "@Produces" annotations at Java methods public javax.ws.rs.core.Response com.joescodeshack.igdb.controller.GenreController.getGenres() and public final java.util.List com.joescodeshack.igdb.controller.GenreController.getGenres() at matching regular expression /genre. These two methods produces and consumes exactly the same mime-types and therefore their invocation as a resource methods will always fail.; source='org.glassfish.jersey.server.model.RuntimeResource@1b6cce78']
    at org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:555) ~[jersey-server-2.23.1.jar:na]
    at org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184) ~[jersey-server-2.23.1.jar:na]
    at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350) ~[jersey-server-2.23.1.jar:na]
    at org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347) ~[jersey-server-2.23.1.jar:na]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[jersey-common-2.23.1.jar:na]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[jersey-common-2.23.1.jar:na]
    at org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255) ~[jersey-common-2.23.1.jar:na]
    at org.glassfish.jersey.server.ApplicationHandler.<init>(ApplicationHandler.java:347) ~[jersey-server-2.23.1.jar:na]
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:392) ~[jersey-container-servlet-core-2.23.1.jar:na]
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177) ~[jersey-container-servlet-core-2.23.1.jar:na]
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369) ~[jersey-container-servlet-core-2.23.1.jar:na]
    at javax.servlet.GenericServlet.init(GenericServlet.java:158) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1194) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:806) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133) ~[tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_102]
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_102]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.4.jar:8.5.4]
    at java.lang.Thread.run(Thread.java:745) [na:1.8.0_102]
2016-09-06 15:26:26.529错误17332---[nio-8080-exec-1]o.a.c.c.c.[j.i.c.JerseyConfig]:为servlet com.joescodeshack.igdb.config.JerseyConfig分配异常
org.glassfish.jersey.server.model.ModelValidationException:应用程序资源模型的验证在应用程序初始化期间失败。
[[FATAL]一个资源模型具有用于HTTP方法GET和input mime类型的不明确(子)资源方法,如Java方法public javax.ws.rs.core.Response com.joescodeshack.igdb.controller.GenreController.getGenres()中的“@Consumes”和“@products”注释所定义和public final java.util.List com.joescodeshack.igdb.controller.GenreController.getGenres()匹配正则表达式/流派。这两个方法产生和使用完全相同的mime类型,因此它们作为资源方法的调用将始终失败。;source='org.glassfish.jersey.server.model。RuntimeResource@1b6cce78']
在org.glassfish.jersey.server.ApplicationHandler.initialize(ApplicationHandler.java:555)~[jersey-server-2.23.1.jar:na]
在org.glassfish.jersey.server.ApplicationHandler.access$500(ApplicationHandler.java:184)~[jersey-server-2.23.1.jar:na]
在org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:350)~[jersey-server-2.23.1.jar:na]
在org.glassfish.jersey.server.ApplicationHandler$3.call(ApplicationHandler.java:347)~[jersey-server-2.23.1.jar:na]
在org.glassfish.jersey.internal.Errors.process(Errors.java:315)~[jersey-common-2.23.1.jar:na]
在org.glassfish.jersey.internal.Errors.process(Errors.java:297)~[jersey-common-2.23.1.jar:na]
在org.glassfish.jersey.internal.Errors.processWithException(Errors.java:255)~[jersey-common-2.23.1.jar:na]
在org.glassfish.jersey.server.ApplicationHandler.(ApplicationHandler.java:347)~[jersey-server-2.23.1.jar:na]
在org.glassfish.jersey.servlet.WebComponent.(WebComponent.java:392)~[jersey-container-servlet-core-2.23.1.jar:na]
在org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177)~[jersey-container-servlet-core-2.23.1.jar:na]
在org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369)~[jersey-container-servlet-core-2.23.1.jar:na]
在javax.servlet.GenericServlet.init(GenericServlet.java:158)~[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1194)~[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:806)~[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:133)~[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:108)[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:522)[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349)[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110)[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785)[tomcat-embed-core-8.5.4.jar:8.5.4]
位于org.apache.tomcat.util.net.niodendpoint$SocketProcessor.doRun(niodendpoint.java:1425)[tomcat-embed-core-8.5.4.jar:8.5.4]
在org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)[tomcat-embed-core-8.5.4.jar:8.5.4]
位于java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[na:1.8.0102]
在java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[na:1.8.0_102]
在org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)[tomcat-embed-core-8.5.4.jar:8.5.4]
在java.lang.Thread.run(Thread.java:745)[na:1.8.0_102]

问题在于以下属性:

val genres : List<Genre> = listOf(Genre(1,"Butt"), Genre(2, "Cow"))
val-genres:List=listOf(类型(1,“屁股”)、类型(2,“牛”))
生成在JVM级别具有以下签名的方法:

@NotNull
public final List<Genre> getGenres()
@NotNull
公共最终列表getGenres()
如您所见,它与控制器中的其他方法冲突。若要解决此问题,请将属性更改为
private
或重命名其中一个方法

另外,错误消息非常清楚地说明了问题:

public javax.ws.rs.core.Response
com.joescodeshack.igdb.controller.GenreController.getGenres()
public final java.util.List
C
@NotNull
public final List<Genre> getGenres()