试图保存一对多JPA关系。我已经编写了一个自定义控制器。我只获得giftSet中的第一个ID,而不是所有ID。我简化了代码。
我的帖子请求-
{
"name": "Project 7",
"giftSet": [
{
"id": "1"
},
{
"id":"33"
}
]
}
class Holiday{
private String name;
private Set<GiftConfig> giftSets;
}
class GiftSet {
private Integer id;
private Holiday holiday;
}
class GiftConfig {
private Integer id;
private String name;
}
@RequestMapping(method = RequestMethod.POST, value="/api/saveholiday")
public ResponseEntity<Map<String, Holiday>> saveHoliday(@RequestBody Holiday holiday) {
System.out.println(holiday);
return null;
}
首先,我添加多个GiftConfig。之后,在创建“假日”时,我还要添加GiftSet的详细信息。
在调试模式下,我在giftSet中仅看到ID 1,而没有看到ID 1和33。 注意-将设置更改为列表不是一个选项。
答案 0 :(得分:0)
我看到2个问题,最后一个可能是问题。
正如评论中提到的豆蔻一样,您也可以使用@JsonAutoDetect(fieldVisibility = Visibility.ANY)
-但我尚未对此进行测试。
最后,如果从Java转换回JSON,也要小心使用循环引用。我看到一个假期有一组giftSet,但是giftSet指向一个假期。 如果gitset指向同一个父母假期,则这是一个循环引用,将崩溃。
您的问题是您缺少getter和setter。 使用lombok并添加@data批注或添加getter和setter。
@Data
public static class Holiday{
private String name;
private Set<GiftSet> giftSets;
}
@Data
public static class GiftSet {
private Integer id;
private Holiday holiday;
}
我使用了以下有效负载:
{
"name": "HolidaySet",
"giftSets": [
{
"id": 1111,
"holiday": {
"name": null,
"giftSets": null
}
},
{
"id": 1112,
"holiday": {
"name": null,
"giftSets": null
}
}
]
}
我做了一个快速测试,以了解有效载荷应该是什么样子。
@RequestMapping(method = RequestMethod.POST, value="/api/saveholiday")
public ResponseEntity<Map<String, Holiday>> saveHoliday(@RequestBody Holiday holiday) throws JsonProcessingException {
System.out.println(holiday);
fakeItTest();
return null;
}
private void fakeItTest() throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
Set<GiftSet> giftSets2 = new HashSet<>();
GiftSet gg = new GiftSet();
gg.setId(1111);
gg.setHoliday(new Holiday());
giftSets2.add(gg);
GiftSet gg2 = new GiftSet();
gg2.setId(1112);
gg2.setHoliday(new Holiday());
giftSets2.add(gg2);
Holiday holiday2 = new Holiday();
holiday2.setName("HolidaySet");
holiday2.setGiftSets(giftSets2);
String a = objectMapper.writeValueAsString(holiday2);
System.out.println(a);
}
@Data
public static class Holiday{
private String name;
private Set<GiftSet> giftSets;
}
@Data
public static class GiftSet {
private Integer id;
private Holiday holiday;
}