【发布时间】:2020-11-28 11:05:19
【问题描述】:
我正在编写一个 Spring Boot 应用程序,它处理返回以下响应模式的 REST API:
{
"id": 550,
"results": {
"AR": {
"link": "https://www.themoviedb.org/movie/550-fight-club/watch?locale=AR",
"flatrate": [
{
"display_priority": 1,
"logo_path": "/68MNrwlkpF7WnmNPXLah69CR5cb.jpg",
"provider_id": 119,
"provider_name": "Amazon Prime Video"
},
{
"display_priority": 7,
"logo_path": "/rgbalNWbAuhWklHH5JAnF53Wjey.jpg",
"provider_id": 339,
"provider_name": "Movistar Play"
}
],
"rent": [
{
"display_priority": 2,
"logo_path": "/q6tl6Ib6X5FT80RMlcDbexIo4St.jpg",
"provider_id": 2,
"provider_name": "Apple iTunes"
},
{
"display_priority": 3,
"logo_path": "/p3Z12gKq2qvJaUOMeKNU2mzKVI9.jpg",
"provider_id": 3,
"provider_name": "Google Play Movies"
},
{
"display_priority": 8,
"logo_path": "/mzu37NQphDvqN2BHKM0Rwq9Es3r.jpg",
"provider_id": 167,
"provider_name": "Claro video"
}
],
"buy": [
{
"display_priority": 2,
"logo_path": "/q6tl6Ib6X5FT80RMlcDbexIo4St.jpg",
"provider_id": 2,
"provider_name": "Apple iTunes"
},
{
"display_priority": 3,
"logo_path": "/p3Z12gKq2qvJaUOMeKNU2mzKVI9.jpg",
"provider_id": 3,
"provider_name": "Google Play Movies"
}
]
},
"AT": {
"link": "https://www.themoviedb.org/movie/550-fight-club/watch?locale=AT",
"rent": [
{
"display_priority": 2,
"logo_path": "/q6tl6Ib6X5FT80RMlcDbexIo4St.jpg",
"provider_id": 2,
"provider_name": "Apple iTunes"
},
{
"display_priority": 3,
"logo_path": "/p3Z12gKq2qvJaUOMeKNU2mzKVI9.jpg",
"provider_id": 3,
"provider_name": "Google Play Movies"
},
{
"display_priority": 7,
"logo_path": "/vjKeS7Y9fNyqNtvp2ROCc71iu1u.jpg",
"provider_id": 40,
"provider_name": "Chili"
},
{
"display_priority": 8,
"logo_path": "/pZgeSWpfvD59x6sY6stT5c6uc2h.jpg",
"provider_id": 130,
"provider_name": "Sky Store"
},
{
"display_priority": 10,
"logo_path": "/sVBEF7q7LqjHAWSnKwDbzmr2EMY.jpg",
"provider_id": 10,
"provider_name": "Amazon Video"
},
{
"display_priority": 14,
"logo_path": "/mosNtwHNCqCmjk7n5odKgYYf2GI.jpg",
"provider_id": 20,
"provider_name": "maxdome Store"
},
{
"display_priority": 18,
"logo_path": "/wuViyDkbFp4r7VqI0efPW5hFfQj.jpg",
"provider_id": 35,
"provider_name": "Rakuten TV"
},
{
"display_priority": 37,
"logo_path": "/paq2o2dIfQnxcERsVoq7Ys8KYz8.jpg",
"provider_id": 68,
"provider_name": "Microsoft Store"
}
],
"buy": [
{
"display_priority": 2,
"logo_path": "/q6tl6Ib6X5FT80RMlcDbexIo4St.jpg",
"provider_id": 2,
"provider_name": "Apple iTunes"
},
{
"display_priority": 3,
"logo_path": "/p3Z12gKq2qvJaUOMeKNU2mzKVI9.jpg",
"provider_id": 3,
"provider_name": "Google Play Movies"
},
{
"display_priority": 7,
"logo_path": "/vjKeS7Y9fNyqNtvp2ROCc71iu1u.jpg",
"provider_id": 40,
"provider_name": "Chili"
},
{
"display_priority": 8,
"logo_path": "/pZgeSWpfvD59x6sY6stT5c6uc2h.jpg",
"provider_id": 130,
"provider_name": "Sky Store"
},
{
"display_priority": 10,
"logo_path": "/sVBEF7q7LqjHAWSnKwDbzmr2EMY.jpg",
"provider_id": 10,
"provider_name": "Amazon Video"
},
{
"display_priority": 14,
"logo_path": "/mosNtwHNCqCmjk7n5odKgYYf2GI.jpg",
"provider_id": 20,
"provider_name": "maxdome Store"
},
{
"display_priority": 18,
"logo_path": "/wuViyDkbFp4r7VqI0efPW5hFfQj.jpg",
"provider_id": 35,
"provider_name": "Rakuten TV"
},
{
"display_priority": 37,
"logo_path": "/paq2o2dIfQnxcERsVoq7Ys8KYz8.jpg",
"provider_id": 68,
"provider_name": "Microsoft Store"
}
]
}
... like 50 more of the above ...
}
}
在尝试编写 DTO 类来捕获此响应时,我意识到由于“结果”字段的内容就像一个地图,我不知道如何为它编写 DTO 对象的组合。通常我会写类似“:
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ProviderSearchResultDto {
@JsonProperty("id")
private Long id;
@JsonProperty("results")
private List<CountryResultDto> results;
}
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class CountryResultDto {
@JsonProperty("link")
private String link;
@JsonProperty("flatrate")
private List<ResultDto> result;
@JsonProperty("rent")
private List<ResultDto> rent;
@JsonProperty("buy")
private List<ResultDto> buy;
}
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@JsonIgnoreProperties(ignoreUnknown = true)
public class ResultDto {
@JsonProperty("display_priority")
private int displayPriority;
@JsonProperty("logo_path")
private String logoPath;
@JsonProperty("provider_id")
private int providerId;
@JsonProperty("provider_name")
private int providerName;
}
但是因为在响应结果中就像一个命名实体的集合,我不知道该怎么做。有人吗?
【问题讨论】:
标签: java json spring spring-boot hibernate