gpt4 book ai didi

spring - Spring Boot 未使用 Jackson Kotlin 插件

转载 作者:行者123 更新时间:2023-12-04 19:28:26 25 4
gpt4 key购买 nike

我不能强制 Spring 为 Jackson 使用 Kotlin 模块。
问题是 jackson 无法将 JSON 解析为数据类。

//Exception
2018-02-23 13:29:09.046 ERROR 24730 --- [nio-9300-exec-1] o.a.c.c.C.[.[.[.[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [/services] threw exception [Request processing failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [*.model.User]: Constructor threw exception; nested exception is java.lang.IllegalArgumentException: Parameter specified as non-null is null: method *.model.User.<init>, parameter name] with root cause
java.lang.IllegalArgumentException: Parameter specified as non-null is null: method *.User.<init>, parameter name

//JSON
{
"name": "name",
"surname": "surname",
"email": "email",
"password": "pswd"
}

//Model
@Entity
@Table
data class User(
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
var userId: Long?,
var name: String,
var surname: String,
var email: String,
var password: String,
(...)
): Resource() {
(...)
}

我试图配置 jackson ,但没有太大帮助。奇怪的是,在我配置 ObjectMapper 的 @Bean 方法中,一切正常。
此外,当我为不可为空的字段添加默认值时,它们并没有被覆盖。
@Configuration
class JacksonConfig {
@Bean
fun mappingJackson2HttpMessageConverter(): MappingJackson2HttpMessageConverter {
val mapper = ObjectMapper().registerKotlinModule()
mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
var user = mapper.readValue<User>("{\n" +
"\t\"name\": \"name\",\n" +
"\t\"surname\": \"surname\",\n" +
"\t\"email\": \"email\",\n" +
"\t\"password\": \"pswd\"\n" +
"}")
return MappingJackson2HttpMessageConverter(mapper)
}
}

可能重要的是该模型与应用程序本身位于不同的项目中。

Kotlin 版本是 1.20
jackson 依赖:
    <dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${jackson.version}</version> <!--2.9.4-->
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
<version>${jackson.version}</version>
</dependency>

而我这一刻的尝试:

All of these answers

Similiar problem but probably different case anyway

还有一些其他的,不值得注意。

最佳答案

我的结构如下:

abstract class AbstractController (...) {
fun save(@RequestMapping entity: T) {
(...)
}

为了启用它,我使用了
class DeriveredController (...) {
@PostMapping
override fun save(entity: Derivered) {
(...)
}
}

问题在于派生函数中缺少@RequestMapping。

关于spring - Spring Boot 未使用 Jackson Kotlin 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48950535/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com