Spring调用Swapi API转换JSON为对象时反序列化错误求解
问题解决:Swapi API反序列化错误修复
错误根源
你调用的Swapi /films/接口返回的是单个JSON对象(包含results数组、count等字段),但你在代码里试图把它反序列化为FilmModel[]数组类型,Jackson无法将对象解析为数组,因此抛出Cannot deserialize value of type [Lcom.starwarsapi.filmsapi.model.FilmModel; from Object value错误。
具体修改步骤
1. 修正FilmServiceImpl的反序列化逻辑
把原来接收数组的代码改成接收单个FilmModel对象,再提取其中的results数组:
@Service public class FilmServiceImpl implements FilmService { @Value("${external.api.url}") private String filmBaseUrl; @Autowired private RestTemplate restTemplate; @Override public List<FilmResultModel> getAllFilms() { // 接收单个FilmModel对象,而非数组 FilmModel result = restTemplate.getForObject(filmBaseUrl, FilmModel.class); // 将results数组转为List返回,若需要可修改的List,用new ArrayList<>(Arrays.asList(result.getResults())) return Arrays.asList(result.getResults()); } }
2. 调整Service接口的返回类型
修改FilmService,返回实际的电影数据类型FilmResultModel的集合:
public interface FilmService { List<FilmResultModel> getAllFilms(); }
3. 调整Controller的返回类型
同步修改FilmController的返回类型,和Service保持一致:
@RestController @RequestMapping("/films") public class FilmController { @Autowired private FilmService filmService; @GetMapping public List<FilmResultModel> getAllFilms() { return filmService.getAllFilms(); } }
4. 修正FilmResultModel的字段错误
注意到你在FilmResultModel里把release_date对应的字段写成了releaseData(拼写错误,应该是releaseDate),这会导致该字段无法正确赋值,修正如下:
@Data @JsonInclude(JsonInclude.Include.NON_NULL) @JsonIgnoreProperties(ignoreUnknown = true) public class FilmResultModel { private String title; @JsonProperty("episode_id") private Integer episodeId; @JsonProperty("opening_crawl") private String description; private String director; private String producer; @JsonProperty("release_date") private String releaseDate; // 修正拼写错误 private String[] characters; private String[] planets; private String[] starships; private String[] vehicles; private String[] species; private String created; private String edited; private String url; }
验证逻辑
修改完成后,RestTemplate会正确将Swapi返回的JSON对象解析为FilmModel,再从中取出电影列表返回,这样就解决了反序列化错误,同时能得到可用的电影对象集合,方便后续实现PUT修改描述的功能。
内容的提问来源于stack exchange,提问作者Corvo
相关产品推荐
相关产品推荐

