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
相关产品推荐
相关产品推荐

