我试图弄清楚如何将从ajax帖子收到的嵌套JSON数据绑定到与spring mvc框架中与另一个POJO有一对多关系的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错误,说它是一个错误的请求。 我有spring jackson-databind依赖,它似乎正在工作,因为我可以将一个MagZone对象与另一个控制器绑定。
如何让spring控制器对JSON数据进行深层绑定,以便我有一个MagTemplate对象,其中包含3个MagZone对象的列表?我知道这在其他mvc框架中是可行的,但我似乎无法找到它在春天工作的一个例子。
答案 0 :(得分:1)
将@JsonIgnore
添加到JSON
中未使用的字段(或方法)中以从反序列化中排除。