我想弄清楚如何將從ajax帖子接收到的嵌套JSON數據綁定到一個POJO與春天的另一個POJO有一對多的關係mvc框架。春天mvc控制器綁定嵌套的JSON POJO與一對多的關係
,比如我有2類:
public class MagTemplate implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private BigInteger magTemplateId;
private String templateName;
//bi-directional many-to-one association to MagZone
@OneToMany(mappedBy="magTemplate", cascade = CascadeType.PERSIST)
private List<MagZone> magZones;
public MagTemplate() {
}
//getters and setters
}
public class MagZone implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private BigInteger magZoneId;
private String zoneName;
//bi-directional many-to-one association to MagTemplate
@ManyToOne
@JoinColumn(name="magTemplateId")
private MagTemplate magTemplate;
public MagZone() {
}
//getters and setters
}
而且我有一個JSON對象,看起來像這樣:
{
templateName : "template 1",
magZones : [
zoneName : "zone 1"
},
{
zoneName : "zone 2"
},
zoneName : "zone 3"
}
]
}
當我試圖創建一個控制器,看起來像這樣:
@RequestMapping(value = "/saveTemplate", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = "application/json")
@ResponseBody
public AjaxResponse saveTemplate(HttpServletRequest request, @RequestBody MagTemplate magTemplate){
//controller code
}
然後做一個像這樣的ajax後:
$.ajax({
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
contentType : "application/json",
method: "POST",
dataType: 'json',
url: url,
data: JSON.stringify(jsonData),
success: function(response){
},
error:function(jqXHR, textStatus, errorThrown){
console.error(jqXHR);
console.error('status: ' + textStatus + "\n" + "error: " + errorThrown);
}
});
我得到一個HTTP400錯誤,指出它的錯誤請求。 我有春季傑克遜數據綁定依賴關係,它似乎工作,因爲我可以綁定一個單一的MagZone對象與另一個控制器。
如何讓彈簧控制器對JSON數據進行深度綁定,以便我擁有一個具有3個MagZone對象列表的MagTemplate對象?我知道在其他mvc框架中這是可能的,但我似乎找不到它在春季工作的一個例子。
https://stackoverflow.com/q/43487344/6756805你可以參考這個建模你的pojo ..我有同樣的問題,並修復它 – Hema
區別在於我不是在一個字符串中拉JSON。在我的方法聲明中,該參數與我的POJO類型相同,並且jackson-databind應該處理該映射。如果我只發送一個孩子,它將映射到子類,但是如果我嘗試發送包含該孩子的父代,它會中斷。 – David