使用Quarkus.io与rest-client-reactive-json反序列化失败问题
问题排查与解决思路
1. 实体类拼写错误
你的代码里存在明显的拼写错误,这是反序列化失败的核心原因之一:
- 包装类
ExtentsionWrapper的类名拼写错误,应为ExtensionWrapper - 包装类中字段
extentions拼写错误,应为extensions - 字段类型
List<Extention>中的类名拼写错误,正确类名是Extension
修正后的实体类代码:
public class Extension { public String id; public List<String> keywords; } // 修正后的包装类 public class ExtensionWrapper{ List<Extension> extensions; }
2. 字段访问权限与序列化规则问题
Jackson默认需要字段具备可访问性,虽然Extension的字段是public,但ExtensionWrapper中的extensions字段是包私有(无访问修饰符),Jackson可能无法正常读取或写入该字段。
推荐两种解决方式:
- 给所有字段添加Getter/Setter方法
- 引入Lombok简化代码,添加
@Data注解自动生成Getter/Setter、构造方法等:
先在pom.xml中添加Lombok依赖:
<dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency>
然后修改实体类:
@Data public class Extension { private String id; private List<String> keywords; } @Data public class ExtensionWrapper{ private List<Extension> extensions; }
3. 确认Rest Client接口返回类型匹配
确保你的Rest Client接口声明的返回类型是修正后的ExtensionWrapper,示例如下:
@RegisterRestClient(baseUri = "你的服务地址") public interface ExtensionServiceClient { @GET @Path("/extensions") ExtensionWrapper getExtensions(); }
4. 校验响应JSON结构一致性
确认第三方服务返回的JSON结构与你的实体类字段完全匹配,比如正确的JSON格式应该是:
{ "extensions": [ {"id": "quarkus-rest-client-reactive", "keywords": ["rest", "client"]} ] }
如果JSON中的字段名与实体类字段名不一致,需要用@JsonProperty注解做映射,例如:
@Data public class ExtensionWrapper{ @JsonProperty("extentions") // 匹配返回JSON中的字段名 private List<Extension> extensions; }
内容的提问来源于stack exchange,提问作者Abdullah Al Noman
相关产品推荐
相关产品推荐

