如何使用Spring Boot生成指定格式的JSON?求参考Spring Boot应用示例
如何用Spring Boot生成指定结构的JSON
要生成你需要的JSON格式,核心是让Java对象结构和目标JSON一一对应,Spring Boot默认用Jackson完成对象到JSON的序列化,下面是完整的参考实现:
1. 定义匹配JSON结构的实体类
先创建两个实体类,分别对应JSON里的歌手和专辑对象:
专辑实体(Album)
对应JSON中的专辑子对象:
import lombok.Data; // @Data注解自动生成getter、setter、toString等方法,不用手动写 @Data public class Album { private String title; private String artist; private int ntracks; }
如果你不想用Lombok,直接手动添加所有字段的getter、setter和无参/有参构造方法即可。
歌手实体(Artist)
对应JSON中的顶层歌手对象:
import lombok.Data; import java.util.List; @Data public class Artist { private String name; private List<Album> albums; }
2. 编写REST控制器返回数据
创建一个简单的控制器,构造好测试数据后返回,Spring会自动把对象序列化为JSON:
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import java.util.List; @RestController public class ArtistController { @GetMapping("/artists") public List<Artist> getArtists() { // 构造歌手foo的专辑 Album fooAlbum1 = new Album(); fooAlbum1.setTitle("album_one"); fooAlbum1.setArtist("foo"); fooAlbum1.setNtracks(12); Album fooAlbum2 = new Album(); fooAlbum2.setTitle("album_two"); fooAlbum2.setArtist("foo"); fooAlbum2.setNtracks(15); Artist foo = new Artist(); foo.setName("foo"); foo.setAlbums(List.of(fooAlbum1, fooAlbum2)); // 构造歌手bar的专辑 Album barAlbum1 = new Album(); barAlbum1.setTitle("foo walks into a bar"); barAlbum1.setArtist("bar"); barAlbum1.setNtracks(12); Album barAlbum2 = new Album(); barAlbum2.setTitle("album_song"); barAlbum2.setArtist("bar"); barAlbum2.setNtracks(17); Artist bar = new Artist(); bar.setName("bar"); bar.setAlbums(List.of(barAlbum1, barAlbum2)); // 返回歌手列表 return List.of(foo, bar); } }
3. 测试接口
启动Spring Boot应用后,访问http://localhost:8080/artists,就能得到和你需求完全一致的JSON响应:
[ { "name": "foo", "albums": [ { "title": "album_one", "artist": "foo", "ntracks": 12 }, { "title": "album_two", "artist": "foo", "ntracks": 15 } ] }, { "name": "bar", "albums": [ { "title": "foo walks into a bar", "artist": "bar", "ntracks": 12 }, { "title": "album_song", "artist": "bar", "ntracks": 17 } ] } ]
额外提示
- 确保你的项目引入了
spring-boot-starter-web依赖,它默认包含了Jackson序列化所需的所有包,无需额外引入。 - 如果需要自定义JSON格式(比如字段重命名、忽略空字段),可以用Jackson的注解,比如
@JsonProperty("custom_name")指定字段名,@JsonIgnore忽略某个字段。
内容的提问来源于stack exchange,提问作者saran sanjeevi
相关产品推荐
相关产品推荐

