Ajax Post提交复杂JSON对象的简便有效方法(适用jQuery-Ajax和原生JS XMLHttpRequest POST)

用Ajax Post提交非常复杂JSON对象,是一件麻烦的事,如果以简单JSON对象的提交思维来设计复杂JSON对象时,经常出现各种问题。现在找到了一个非常简便有效的方法,跟大家分享下。

下面,用SpringBoot,演示下jQuery Ajax Post如何提交以下复杂JSON对象,代码如下:

/**
 * 销售明细
 * 
 * @author sunchangtan
 *
 */
@Data
public class SellDetail {
	private long sellId;
	private String userNo;
	private User user;
	private List orders;
}
@Data
public class User {
	private Integer userId;

	private String userName;

	private String password;

	private String phone;

	private String email;
}
@Data
public class Order {
	private String orderId;
	private String userId;
	private Date placeTime;
	private List productions;
}
@Data
public class Production {
	private String skuId;
	private String proId;
	private String name;
	private double price;
	private int number;
}

(1)Ajax提交的数据对象的Key值,以扁平方式写法,其实就是Spring支持的对象属性访问方式。 如果直接使用js对象提交,会出现各种问题,比如后台直接接受一部分数据等,尤其使用原生的XMLHttpRequest,问题会更多了。以前本人经常为此头疼不已

(2)Controller中接受Post的方法:

@RequestMapping("/json/submit01")
	@ResponseBody
	public ResponseResult submit01(SellDetail sellDetail) {
		System.out.println(sellDetail.toString());
		return ResponseResult.builder().code(ResponseResult.SUCCESS).build();
	}

(3)Order类中有Date类型的数据,SpringMVC不能直接将字符串转为Date类,这需要使用类型转换器

在Controller类中添加如下代码:

@InitBinder
	protected void initBinder(WebDataBinder binder) {
		binder.registerCustomEditor(Date.class, new CustomDateEditor(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"), true));
	}
这样就可以完美解决提交非常复杂的JSON对象了。

你可能感兴趣的:(java,ajax)