2017-09-26 84 views
1

我想弄清楚如何將從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框架中這是可能的,但我似乎找不到它在春季工作的一個例子。

+0

https://stackoverflow.com/q/43487344/6756805你可以參考這個建模你的pojo ..我有同樣的問題,並修復它 – Hema

+0

區別在於我不是在一個字符串中拉JSON。在我的方法聲明中,該參數與我的POJO類型相同,並且jackson-databind應該處理該映射。如果我只發送一個孩子,它將映射到子類,但是如果我嘗試發送包含該孩子的父代,它會中斷。 – David

回答

0

@JsonIgnore添加到您在JSON中不使用的字段(或方法)以排除反序列化。

+0

我傳遞的JSON對象與POJO具有相同的字段,並且java類中的唯一方法只是獲取者和設置者 – David

+0

如果是這樣,請嘗試使用@ ManyToOne將@ JsonIgnore添加到該字段。因爲它可能是一個循環參考。 – Alex

+0

我試過這樣做,它仍然不會映射 – David