DEBUG.WIKI
搬瓦工;先看线路,再选 VPS;CN2 GIA · 对应线路套餐;查看线路 →
野草云;香港 200Mbps 峰值;不限月流量 · BGP VPS;查看套餐 →
V.PS:让项目靠近用户,亚太、欧洲、北美 KVM VPS

RestClient 自定义 JSON 后没了默认转换器:7.0 显式 registerDefaults

Spring Framework 7.0 使用 configureMessageConverters 后,默认转换器可能不再注册。需要保留默认集合时,在 consumer 中先调用 registerDefaults。

手工创建 RestClient,加入 configureMessageConverters 定制 JSON 后,原来能处理的响应类型却没有合适转换器。Spring Framework 7.0 的这条配置路径会从空的转换器构建器开始;要保留默认集合,应在 consumer 中显式调用 registerDefaults()。

正式 7.0.7 的实现仍保留这条空构建器路径。Spring Boot 自动配置的 RestClient.Builder 已有自己的默认注册,是否受影响要看实际创建入口。

在定制前注册需要的默认项

下面是 Spring 7 的构建片段,jsonMapper 为项目已配置的 Jackson 3 JsonMapper:

RestClient client = RestClient.builder()
        .configureMessageConverters(converters -> converters
                .registerDefaults()
                .withJsonConverter(
                        new JacksonJsonHttpMessageConverter(jsonMapper)))
        .build();

相应类型是 org.springframework.web.client.RestClient 与 org.springframework.http.converter.json.JacksonJsonHttpMessageConverter。这段应合并到原 client 的配置中,保留认证、基础地址、拦截器和超时,不要用空白 builder 替换整套现有设置。

withJsonConverter 设置 JSON 转换器,不等于把所有默认类型一并注册。若业务有意只允许特定转换器,应保持那份限制,不应为消除一条异常无条件恢复全部默认能力。

mutate 也要核对构建过程

从已有 client 调用 mutate() 后继续配置,不应假定得到的是已经物化、可直接修改的完整默认转换器列表。这条实现保留的是相应配置过程;新增 configurer 后同样需要核对默认注册。

configureMessageConvertersList 用于修改最终列表,不能凭它的名字推断列表一定非空。先确定默认项是否已经注册,再在列表层做替换或过滤,避免遍历一个空列表却以为定制成功。

7.1 拟调整为默认注册并允许显式禁用;这里不把它视为已经发布的正式行为。后续升级须对照实际正式版本重新审查配置,避免保留与新默认行为相冲突的冗余定制。

验证时让原 client 分别处理业务需要的 JSON、字符串或字节响应,确认实际选中的转换器及自定义 mapper 行为。只直接调用 mapper 成功,无法证明 HTTP 消息转换链完整;也不要把读取超限等其他错误归到这条配置路径。