fix(json): применять Kotlin-модуль Jackson 3

This commit is contained in:
2026-10-28 00:02:01 +03:00
parent 905feb440b
commit b7129b92e0
5 changed files with 86 additions and 0 deletions

View File

@@ -0,0 +1,20 @@
package ru.ysu.lms.identity.config
import org.springframework.boot.jackson.autoconfigure.JsonMapperBuilderCustomizer
import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import tools.jackson.module.kotlin.KotlinModule
/**
* Jackson 3 не подхватывает Kotlin-модуль автоматически в Spring Boot 4:
* без него DTO с default-значениями требуют все поля в JSON.
*/
@Configuration
class JacksonConfig {
@Bean
fun kotlinModule(): KotlinModule = KotlinModule.Builder().build()
@Bean
fun kotlinJsonCustomizer(): JsonMapperBuilderCustomizer =
JsonMapperBuilderCustomizer { builder -> builder.addModule(KotlinModule.Builder().build()) }
}

View File

@@ -65,6 +65,8 @@ class TeacherIntegrationTest {
@Autowired lateinit var context: WebApplicationContext
@Autowired lateinit var jsonMapper: tools.jackson.databind.json.JsonMapper
private val mockMvc: MockMvc by lazy {
MockMvcBuilders
.webAppContextSetup(context)
@@ -184,6 +186,19 @@ class TeacherIntegrationTest {
}
}
@Test
fun `student creation accepts omitted optional json fields`() {
val request =
jsonMapper.readValue(
"""{"studentNo":"api-student-1","lastName":"Тестов"}""",
CreateStudentRequest::class.java,
)
assertEquals("api-student-1", request.studentNo)
assertEquals("Тестов", request.lastName)
assertEquals("", request.firstName)
assertEquals("", request.basis)
}
private fun student(login: String): Account =
Account(
login = login,