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

使用Micronaut Serialization时AccessRefreshToken无法序列化问题

问题分析

核心矛盾在于:你的Java库引入了micronaut-serde-jackson作为序列化组件,它会默认替代Micronaut应用中的Jackson序列化机制;但io.micronaut.security.token.jwt.render.AccessRefreshToken类仅使用Jackson的@JsonProperty注解,Serde组件无法识别该注解,导致反序列化时access_token字段无法映射到accessToken属性,最终返回null。

可行解决方案

方案1:为目标类添加Serde兼容注解

修改AccessRefreshToken类,同时添加Serde的@Serdeable和@JsonPropertyName注解,让它同时兼容Jackson和Serde两种序列化机制:

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.micronaut.core.annotation.Introspected;
import io.micronaut.serde.annotation.Serdeable;
import io.micronaut.serde.annotation.JsonPropertyName;

@Introspected
@Serdeable
public class AccessRefreshToken {

    @JsonProperty("access_token")
    @JsonPropertyName("access_token")
    private String accessToken;

    // 请补充getter/setter方法
}

方案2:在消费应用中禁用Serde组件

如果消费应用不需要Serde功能,直接在配置文件中全局禁用Serde,恢复Jackson的默认序列化:

# application.yml
micronaut:
  serde:
    enabled: false

若需要保留Serde对其他类的支持,仅针对AccessRefreshToken所在包禁用Serde:

# application.yml
micronaut:
  serde:
    exclude:
      packages:
        - io.micronaut.security.token.jwt.render

方案3:调整库的依赖传递性

在库的build.gradle中,修改micronaut-serde-jackson的依赖范围,避免将其传递给消费应用:

dependencies {
    // 其他注解处理器依赖保持不变
    compileOnly("io.micronaut.serde:micronaut-serde-jackson:1.1.0")
    // 或者如果库运行时需要该依赖但不想传递,使用以下配置:
    // implementation("io.micronaut.serde:micronaut-serde-jackson:1.1.0") {
    //     transitive = false
    // }
}

方案4:在消费应用中排除传递的Serde依赖

在消费应用的build.gradle中,明确排除common库带来的Serde依赖:

dependencies {
    // 其他依赖保持不变
    implementation('fete.bird:common:1.0.0') {
        exclude group: 'io.micronaut.serde', module: 'micronaut-serde-jackson'
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 18:45:50