You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot Kotlin中携带Payload调用第三方POST接口并返回baseSize

Spring Boot Kotlin调用第三方API并提取指定字段实现方案

1. 添加依赖

在build.gradle.kts中引入WebFlux依赖(WebClient是Spring WebFlux的组件,适合非阻塞HTTP调用):

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin") // 用于Kotlin数据类的JSON序列化/反序列化
}

2. 定义请求/响应数据类

用Kotlin数据类映射请求Payload和响应结构,响应类可忽略不需要的字段:

// 请求Payload对应的数据类
data class SubscriptionQueryRequest(
    val applicationId: String,
    val password: String
)

// 响应数据类,忽略未知字段仅保留需要的baseSize
@JsonIgnoreProperties(ignoreUnknown = true)
data class SubscriptionQueryResponse(
    val baseSize: String
)

3. 配置WebClient Bean

在配置类中创建WebClient实例,方便全局注入使用:

import org.springframework.context.annotation.Bean
import org.springframework.context.annotation.Configuration
import org.springframework.web.reactive.function.client.WebClient

@Configuration
class WebClientConfig {
    @Bean
    fun thirdPartyApiWebClient(): WebClient {
        return WebClient.builder()
            .baseUrl("https://api.example.com.bd") // 第三方API基础地址
            .defaultHeader("Content-Type", "application/json;charset=utf-8")
            .build()
    }
}

4. 编写API调用服务类

创建服务类封装调用逻辑,发送POST请求并提取baseSize字段:

import org.springframework.stereotype.Service
import org.springframework.web.reactive.function.client.WebClient
import reactor.core.publisher.Mono

@Service
class SubscriptionService(
    private val thirdPartyApiWebClient: WebClient
) {
    fun getBaseSize(applicationId: String, password: String): Mono<String> {
        val request = SubscriptionQueryRequest(applicationId, password)
        
        return thirdPartyApiWebClient.post()
            .uri("/subscription/query-base") // 接口路径
            .bodyValue(request)
            .retrieve()
            .bodyToMono(SubscriptionQueryResponse::class.java)
            .map { it.baseSize } // 提取目标字段
            .onErrorResume { ex ->
                // 自定义异常处理逻辑,可根据业务调整
                Mono.error(RuntimeException("调用第三方API失败: ${ex.message}"))
            }
    }
}

5. 可选:对外暴露接口(控制器)

如果需要通过自身服务的接口对外提供该功能,可以编写Controller:

import org.springframework.web.bind.annotation.PostMapping
import org.springframework.web.bind.annotation.RequestBody
import org.springframework.web.bind.annotation.RestController
import reactor.core.publisher.Mono

@RestController
class SubscriptionController(
    private val subscriptionService: SubscriptionService
) {
    @PostMapping("/get-base-size")
    fun getBaseSize(@RequestBody request: SubscriptionQueryRequest): Mono<String> {
        return subscriptionService.getBaseSize(request.applicationId, request.password)
    }
}

补充说明

  • 若偏好阻塞式调用,也可使用RestTemplate(Spring Boot 3.x中RestTemplate已标记为维护状态,优先推荐WebClient)。
  • 异常处理、参数校验等逻辑可根据实际业务需求扩展。

内容的提问来源于stack exchange,提问作者Sajith dilshan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 06:20:28