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

Java中WebClient返回JSON含类名异常问题排查求助

问题描述

用Postman调用某接口时,返回的JSON格式完全正常;但通过Java程序中的WebClient调用同一接口时,响应JSON的每个字段后都附带了类名(例如stat字段显示为stat: class Stat { })。此前相同代码能正确返回JSON格式,目前无法定位问题根源。

涉及的代码片段:

ResponseEntity response = webClientBuilder.build()
        .get()
        .uri(uriBuilder -> uriBuilder.path(resourceUrl).queryParams(queryParams).build())
        .headers(headers)
        .retrieve()
        .toEntity(Test.class)
        .block();

当前异常响应结构示例:

stat: class Stat { } 
Tests: [class Test { A: class A { .... } } ]
可能原因及解决办法
  • Jackson序列化配置异常:WebClient使用的Jackson ObjectMapper可能被修改,开启了类信息输出的配置(比如设置了非NONE的DefaultTyping)。
    解决:手动配置ObjectMapper,关闭默认类型信息输出:

    ObjectMapper objectMapper = new ObjectMapper();
    // 关闭类型信息写入
    objectMapper.deactivateDefaultTyping();
    
    WebClient webClient = WebClient.builder()
            .codecs(configurer -> {
                configurer.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(objectMapper));
                configurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(objectMapper));
            })
            .build();
    
  • 依赖冲突篡改Jackson配置:项目新增依赖后,可能引入了冲突的Jackson版本,或者第三方库自动修改了Jackson的默认配置。
    解决:通过依赖分析工具排查:

    • Maven:执行mvn dependency:tree查看依赖树,排除冲突的Jackson相关依赖
    • Gradle:执行gradle dependencies查看依赖树,调整依赖版本或排除不必要的自动配置类
  • 实体类注解配置错误:Test、Stat、A等实体类可能被添加了@JsonTypeInfo这类会输出类名的注解,导致序列化时附带类信息。
    解决:检查所有相关实体类的注解,移除不必要的@JsonTypeInfo,或调整其配置为仅在必要场景下生效。

  • WebClient编码器被替换:WebClient默认的JSON编码器被替换为自定义编码器或其他第三方编码器,导致序列化逻辑异常。
    解决:恢复WebClient的默认编码器配置,或明确指定使用Jackson编码器,确保序列化逻辑与Postman调用时一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:05:11