带有JpaRepository的RestController返回javax.servlet.ServletException:处理程序无适配器

时间:2020-07-06 05:31:24

标签: spring spring-boot spring-mvc kotlin

使用Kotlin,我具有以下依赖性:

implementation("org.springframework.boot:spring-boot-starter-web")
implementation(kotlin("stdlib-jdk8"))

implementation("org.springframework.boot:spring-boot-starter-data-jpa")
runtimeOnly("org.postgresql:postgresql")
implementation(kotlin("reflect"))

此实体:

@Entity
@Table(name = "some_table")
data class SomeEntity(
    @Id val someNumber: Int,
    val someText: String
)

具有此存储库interface SomeRepo : JpaRepository<SomeEntity, Int>和此控制器:

@RestController("/someEntity")
class SomeController(
    val someRepo: SomeRepo
) {
    @GetMapping
    fun findAll() = someRepo.findAll()
}

但是当我尝试javax.servlet.ServletException: No adapter for handler [com.controller.SomeController@10ffe32f]: The DispatcherServlet configuration needs to include a HandlerAdapter that supports this handler

时,总是遇到此异常localhost:8080/someEntity

findAll更改为@GetMapping fun findAll(): List<SomeEntity> = listOf(SomeEntity(1, "a"))并没有解决。我在这里想念什么?

1 个答案:

答案 0 :(得分:1)

value中传递的@RequestController不是URL映射,而是Spring bean的名称。必须在类级别使用@RequestMapping或在每个方法上使用@GetMapping / @PostMapping明确提供根映射。

@RestController
@RequestMapping("/someEntity")
class SomeController(
    val someRepo: SomeRepo
) {
    @GetMapping
    fun findAll() = someRepo.findAll()
}

@RestController
class SomeController(
    val someRepo: SomeRepo
) {
    @GetMapping("/someEntity")
    fun findAll() = someRepo.findAll()
}