Spring Boot GET接口返回空对象数组问题排查求助
问题根因
Spring Boot默认使用Jackson对返回的Java对象做JSON序列化,Jackson默认仅能访问类的public属性,或者通过public getter方法读取属性值进行序列化。你定义的Movie类所有属性都是包私有访问权限,也没有提供对应的public getter方法,虽然你配置了spring.jackson.serialization.FAIL_ON_EMPTY_BEANS=false避免了序列化报错,但序列化后无法读取到任何属性值,最终返回空JSON对象。
解决方法
方案1:为
Movie类的所有属性添加public getter方法(推荐)
可以手动添加,也可以引入Lombok依赖后给Movie类加@Data注解自动生成getter、setter等通用方法。手动添加示例:public class Movie { String directory; String name; boolean isPlaying; int watchedCounter; public Movie(String directory, String name, boolean isPlaying, int watchedCounter) { this.directory = directory; this.name = name; this.isPlaying = isPlaying; this.watchedCounter = watchedCounter; } public String getDirectory() { return directory; } public String getName() { return name; } public boolean isPlaying() { return isPlaying; } public int getWatchedCounter() { return watchedCounter; } }注意基础类型
boolean的getter命名规则为isXxx,如果是包装类Boolean则命名为getXxx,避免序列化时字段名异常。方案2:配置Jackson支持序列化非public字段
不想修改Movie类的话,直接在application.properties中添加如下配置,让Jackson可以直接读取非public的字段值:spring.jackson.visibility.field=any
修改完成后重新启动项目访问接口,即可返回带字段值的正常JSON结果。
内容的提问来源于stack exchange,提问作者Moshiko ben abu
相关产品推荐
相关产品推荐

