小编Jon*_*sen的帖子

Kotlin Spring Boot bean 验证不起作用

我有很多项目正在慢慢从 Java 迁移到 Kotlin,但在从 Java POJO 更改为 Kotlin 数据类时遇到问题。Bean 验证在 REST 控制器中停止工作。我直接从https://start.spring.io创建了一个非常简单的项目来演示失败。

@SpringBootApplication
class RestValidationApplication

fun main(args: Array<String>) {
    runApplication<RestValidationApplication>(*args)
}

@RestController
class Controller {

    @PostMapping
    fun test(@Valid @RequestBody request: Test) {
        println(request)
    }
}

data class Test(@field:NotNull val id: String)
Run Code Online (Sandbox Code Playgroud)

和梯度:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    id("org.springframework.boot") version "2.6.1"
    id("io.spring.dependency-management") version "1.0.11.RELEASE"
    kotlin("jvm") version "1.6.0"
    kotlin("plugin.spring") version "1.6.0"
}

group = "com.example"
version = "0.0.1-SNAPSHOT"
java.sourceCompatibility = JavaVersion.VERSION_17

repositories {
    mavenCentral()
}

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-validation")
    implementation("org.springframework.boot:spring-boot-starter-web")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("org.jetbrains.kotlin:kotlin-reflect") …
Run Code Online (Sandbox Code Playgroud)

java spring kotlin spring-boot

10
推荐指数
3
解决办法
7872
查看次数

内容类型为 application/x-www-form-urlencoded 的 @RequestParam 在 Spring Boot 2.2 中不起作用

从 Spring Boot 2.1.10 迁移到 2.2.4 后,以下方法开始返回参数 null params。这不是 Spring 中的错误,因为当我制作一个小示例项目时它会起作用。它也适用于没有 Content-Type 的普通 GET 和 POST:application/x-www-form-urlencoded。

@PostMapping(path = "/test", consumes = MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public void test(@RequestParam Map<String, String> params) {
    System.out.println(params);
}
Run Code Online (Sandbox Code Playgroud)

我触发了下面的请求,该请求适用于一个项目,但不适用于另一个项目。我尝试禁用所有过滤器和参数解析器,但没有任何效果。

curl -X POST -H "Content-Type: application/x-www-form-urlencoded" -d "param1=1&param2=2" http://localhost:8080/test
Run Code Online (Sandbox Code Playgroud)

任何帮助或想法将不胜感激。另外,如果有人可以指出 Spring 解析参数的位置,我可以尝试调试并看看会发生什么。

spring content-type spring-boot

6
推荐指数
2
解决办法
2130
查看次数

标签 统计

spring ×2

spring-boot ×2

content-type ×1

java ×1

kotlin ×1