首页 > 解决方案 > 带有 JpaRepository 的 RestController 返回 javax.servlet.ServletException:处理程序没有适配器

问题描述

使用 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"))没有解决。我在这里缺少什么?

标签: springspring-bootspring-mvckotlin

解决方案


value传入的不是@RequestControllerURL 映射,而是 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()
}

推荐阅读