Spring MVC控制器将JSON嵌套到Pojo与一对一关系



我正在尝试弄清楚如何将嵌套的JSON数据从AJAX帖子接收到的嵌套JSON数据到POJO,该POJO在Spring MVC框架中与另一个POJO有一对一的关系。p>例如,我有两个类:

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对象。

如何让弹簧控制器对JSON数据进行深入绑定,以便我有一个带有3个magzone对象列表的Magtemplate对象?我知道这在其他MVC框架中是可能的,但我似乎找不到它在春季工作的示例。

@JsonIgnore添加到 JSON中不使用的字段(或方法)中,以排除在挑战中。

最新更新