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

Spring SseEmitter发送DTO时抛出无合适转换器异常问题排查

问题解决:SseEmitter发送DTO转JSON失败

核心原因

你的SseStatusDto缺少Jackson序列化所需的字段访问能力。@Builder、@AllArgsConstructor、@NoArgsConstructor这三个Lombok注解不会自动生成getter方法,而Spring的消息转换器依赖getter或Jackson相关配置来读取DTO字段,导致无法完成JSON序列化转换。

解决方案

方案1:给DTO添加getter方法

通过Lombok的@Getter注解自动生成所有字段的getter,满足Jackson序列化需求:

@Builder
@AllArgsConstructor
@NoArgsConstructor
@Getter // 添加该注解生成getter
public class SseStatusDto {
    private String currentPhase;
    private int percentage;
    private String result;
}

方案2:配置Jackson直接访问字段

如果不想添加getter,可以通过Jackson注解让其直接访问类字段:

import com.fasterxml.jackson.annotation.JsonAutoDetect;

@Builder
@AllArgsConstructor
@NoArgsConstructor
@JsonAutoDetect(fieldVisibility = JsonAutoDetect.Visibility.ANY) // 允许Jackson直接读取字段
public class SseStatusDto {
    private String currentPhase;
    private int percentage;
    private String result;
}

方案3:确认Jackson依赖存在

确保项目依赖中包含Spring Boot Web Starter,它已内置Jackson相关依赖:
Maven配置(pom.xml):

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

Gradle配置(build.gradle):

implementation 'org.springframework.boot:spring-boot-starter-web'

验证修改

完成上述任一修改后,重新运行代码,SseEmitter即可正常将SseStatusDto序列化为JSON格式发送给客户端。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 06:44:58