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

如何使用Spring Webflux WebClient处理嵌套JSON及MovieDB接口解析异常

问题解决方法

核心原因排查&修复方案

  • 1. 给模型类补充无参构造注解

Lombok的@Data默认仅生成@RequiredArgsConstructor,嵌套对象反序列化时Jackson需要无参构造函数才能实例化Movie对象,给两个模型类都加上@NoArgsConstructor注解即可:

// 补充后的Movie类
@Data
@NoArgsConstructor // 新增
@JsonIgnoreProperties(ignoreUnknown = true)
public class Movie {
    // 原有字段保持不变
}

// MovieDbResponse也可以补充该注解
@Data
@NoArgsConstructor // 新增
@JsonIgnoreProperties(ignoreUnknown = true)
public class MovieDbResponse {
    // 原有字段保持不变,建议把page、total_pages、total_results改为Integer类型,符合接口返回的数字类型
    private Integer page;
    private List<Movie> results;
    private Integer total_pages;
    private Integer total_results;
}
  • 2. 排查Jackson字段命名策略冲突

如果你的Spring Boot项目全局配置了spring.jackson.property-naming-strategy=SNAKE_CASE,Jackson会自动把Java驼峰字段转为下划线JSON键,如果你已经在Java类中写了下划线格式的字段名(如backdrop_path),会被二次转换为backdrop__path(双下划线),导致和接口返回的键无法匹配。
修复方案二选一:

  • 将Java字段改为驼峰命名(如backdropPath、genreIds),依赖全局策略自动匹配下划线JSON键
  • 给所有字段加@JsonProperty显式指定对应JSON键:
    @JsonProperty("backdrop_path")
    private String backdrop_path;
    
  • 3. 验证接口返回原始结构

可以临时修改WebClient调用逻辑,先打印原始返回JSON确认结构匹配:

public Mono<String> searchMovieRaw(String movieName){
    return webclient.get()
            .uri(uriBuilder -> uriBuilder
                    .path("/search/movie")
                    .queryParam("page","1")
                    .queryParam("query",movieName)
                    .queryParam("api_key", apiKey)
                    .queryParam("include_adult","false")
                    .queryParam("language","en-US")
                    .build()
            )
            .retrieve()
            .bodyToMono(String.class)
            .doOnNext(rawJson -> System.out.println("接口返回原始内容:" + rawJson)); // 打印原始内容
}
  • 4. 检查WebClient解码器配置

如果你是手动自定义WebClient实例,确认已注册默认Jackson解码器:

@Bean
public WebClient movieDbWebClient() {
    return WebClient.builder()
            .baseUrl("https://api.themoviedb.org/3")
            .codecs(configurer -> configurer.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder()))
            .build();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 14:18:05