gpt4 book ai didi

jackson - Kotlin 数据类 Jackson @JsonProperty 不受欢迎

转载 作者:行者123 更新时间:2023-12-02 12:48:28 24 4
gpt4 key购买 nike

我正在使用 Kotlin 数据类将 Feign 连接到 POST。

我正在调用的 API 需要 {..."brandInfo":{"TPID":1}...}

我的理解是,如果 jackson-module-kotlin 依赖项没有被正确拾取,Feign 将根本无法 POST,因为 Jackson 编码会彻底失败。

但是,Feign 能够 POST,而 Jackson 能够编码,但是无论我做什么,发布的内容都是 {..."brandInfo":{"tpid":1}...},尽管 BrandInfo val被@JsonProperty("TPID") 注释。

我错过了什么?

@JsonIgnoreProperties(ignoreUnknown = true)
data class KBrandInfo (
@JsonProperty("TPID") //not honored
val TPID: Long
)


interface KConversationServiceClient {
@RequestLine("POST v2/conversations")
@Headers("Content-Type: application/json")
fun createConversation(createConversation: KCreateConversation): String
}


@Provides
public KConversationServiceClient getKConversationServiceClient(
@Named("conversationServiceUrl") String baseUri,
Feign.Builder builder) {
return builder
.logLevel(Logger.Level.FULL)
.decoder(new StringDecoder())
.encoder(new JacksonEncoder(jacksonObjectMapper())) //does this need some extra configuration in order to pick up @JsonProperty annotations?
.requestInterceptor(requestTemplate ->
requestTemplate
.header("requestId", UUID.randomUUID().toString())
.target(KConversationServiceClient.class, baseUri);
}


<properties>
...
<feign.version>9.3.1</feign.version>
<kotlin.version>1.1.51</kotlin.version>
...
</properties>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-core</artifactId>
<version>${feign.version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-hystrix</artifactId>
<version>${feign.version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-slf4j</artifactId>
<version>${feign.version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-jackson</artifactId>
<version>${feign.version}</version>
</dependency>
<dependency>
<groupId>io.github.openfeign</groupId>
<artifactId>feign-gson</artifactId>
<version>${feign.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-stdlib-jre8</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-test-junit</artifactId>
<version>${kotlin.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-reflect</artifactId>
<version>${kotlin.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-kotlin</artifactId>
<version>2.7.9</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${fasterxml.jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${fasterxml.jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${fasterxml.jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>${fasterxml.jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-yaml</artifactId>
<version>${fasterxml.jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-parameter-names</artifactId>
<version>${fasterxml.jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jdk8</artifactId>
<version>${fasterxml.jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${fasterxml.jackson.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<!--Kotlin + Java + Maven implies some funky temporal dependencies and handling of annotation processing when building-->
<!--* https://kotlinlang.org/docs/reference/using-maven.html-->
<!--* https://kotlinlang.org/docs/reference/kapt.html-->
<!--* https://github.com/JetBrains/kotlin-examples/blob/master/maven/dagger-maven-example/pom.xml-->
<plugin>
<groupId>org.jetbrains.kotlin</groupId>
<artifactId>kotlin-maven-plugin</artifactId>
<version>${kotlin.version}</version>
<executions>
<execution>
<id>compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<sourceDirs>
<source>src/main/kotlin</source>
<source>src/main/java</source>
<source>target/generated-sources/annotations</source>
</sourceDirs>
</configuration>
</execution>
<execution>
<id>test-compile</id>
<phase>test-compile</phase>
<goals>
<goal>test-compile</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
...

最佳答案

对我有帮助的是指定注释应该应用于getter:@get:JsonProperty("TPID")

关于jackson - Kotlin 数据类 Jackson @JsonProperty 不受欢迎,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47148778/

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