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

升级SpringBoot 3.2.1后SendinBlue API出现Bean创建异常问题

问题:SpringBoot 3.2.1升级后SendinBlue API抛出NoSuchFieldError异常

将SpringBoot从v3.1.2升级至v3.2.1后,SendinBlue API出现异常,具体报错栈如下:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mailSenderProvider': Invocation of init method failed

...

Caused by: java.lang.NoSuchFieldError: Class okio.Options does not have member field 'okio.Options$Companion Companion'
    at okhttp3.internal.Util.<clinit>(Util.kt:70) ~[okhttp-4.12.0.jar:na]
    at okhttp3.OkHttpClient.<clinit>(OkHttpClient.kt:1073) ~[okhttp-4.12.0.jar:na]
    at sendinblue.ApiClient.<init>(ApiClient.java:80) ~[sib-api-v3-sdk-7.0.0.jar:na]
    at sendinblue.Configuration.<clinit>(Configuration.java:18) ~[sib-api-v3-sdk-7.0.0.jar:na]

相关配置与代码如下:

依赖配置

<dependency>
    <groupId>com.sendinblue</groupId>
    <artifactId>sib-api-v3-sdk</artifactId>
    <version>7.0.0</version>
    <scope>compile</scope>
</dependency>

MailSenderProvider.java代码

// MailSenderProvider.java

import jakarta.annotation.PostConstruct;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import sendinblue.ApiClient;
import sendinblue.auth.ApiKeyAuth;
import sibApi.ContactsApi;
import sibApi.TransactionalEmailsApi;

@Configuration
@RequiredArgsConstructor
public class MailSenderProvider {

    private final MailConfiguration mailConfiguration;

    @PostConstruct
    private void initialize() {
        ApiClient defaultClient = sendinblue.Configuration.getDefaultApiClient();
        ApiKeyAuth apiKeyAuth = (ApiKeyAuth) defaultClient.getAuthentication("api-key");
        apiKeyAuth.setApiKey(mailConfiguration.getApiKey());
    }

    @Bean
    public TransactionalEmailsApi transactionalEmailsApi() {
        return new TransactionalEmailsApi();
    }

    @Bean
    public ContactsApi contactsApi() {
        return new ContactsApi();
    }
}

MailServiceImpl.java代码

// MailService

import sendinblue.ApiException;
import sibApi.TransactionalEmailsApi;
import sibModel.SendSmtpEmail;
import sibModel.SendSmtpEmailSender;
import sibModel.SendSmtpEmailTo;

@Service
@RequiredArgsConstructor
@Slf4j
@EnableAsync
public class MailServiceImpl implements MailService {


    private final MailConfiguration mailConfiguration;
    private final TransactionalEmailsApi transactionalEmailsApi;

    private SendSmtpEmailSender noReplyEmail;
    private SendSmtpEmailTo contactEmail;

    @PostConstruct
    private void init() {
        noReplyEmail = new SendSmtpEmailSender().email(mailConfiguration.getEmail().getNoreply()).name(mailConfiguration.getName());
        contactEmail = new SendSmtpEmailTo().email(mailConfiguration.getEmail().getContact()).name(mailConfiguration.getName());
    }

    @Override
    @Async
    public CompletableFuture<Void> sendRegistrationEMail(String name, String email, String registrationToken, String url) {
        Properties headers = new Properties();
        headers.setProperty("Content-Type", "text/html; charset=UTF-8");

        Properties params = new Properties();
        params.setProperty("token", registrationToken);
        params.setProperty("name", name);
        params.setProperty("url", url + "/account/confirm?token=" + registrationToken);

        SendSmtpEmail sendSmtpEmail = new SendSmtpEmail()
                .sender(noReplyEmail)
                .addToItem(new SendSmtpEmailTo().email(email))
                .subject("Votre Compte ...")
                .headers(headers)
                .params(params)
                .templateId(mailConfiguration.getTemplate().getRegistrationMail());
        try {
            transactionalEmailsApi.sendTransacEmail(sendSmtpEmail);
        } catch (ApiException e) {
            log.error(e.getResponseBody());
        }
        return new CompletableFuture<>();
    }
}
解决方案

这个报错是OkHttp与Okio版本不兼容导致的:SpringBoot 3.2.x升级后默认引入的Okio版本(3.x+)与SendinBlue SDK 7.0.0依赖的OkHttp 4.12.0不匹配——OkHttp 4.12.0依赖的是Okio 3.0.x之前的版本,而Okio 3.x重构了Options类,移除了Companion字段,导致反射调用失败。

解决步骤:

  • 升级SendinBlue SDK版本
    SendinBlue SDK 8.0.0及以上版本已经适配了OkHttp 4.1.x+和Okio 3.x,直接升级依赖版本即可:

    <dependency>
        <groupId>com.sendinblue</groupId>
        <artifactId>sib-api-v3-sdk</artifactId>
        <version>8.1.0</version> <!-- 或最新稳定版 -->
        <scope>compile</scope>
    </dependency>
    
  • 强制指定Okio版本(备选方案)
    如果暂时无法升级SDK,可以在pom.xml中强制指定兼容的Okio版本(比如2.10.0),覆盖SpringBoot默认引入的版本:

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.squareup.okio</groupId>
                <artifactId>okio</artifactId>
                <version>2.10.0</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
    
  • 验证依赖树
    执行mvn dependency:tree命令,检查OkHttp和Okio的版本是否一致且兼容,确保没有冲突的依赖版本被引入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 14:47:05