1、后端Entity
/** * @author Franz.ge [nizhigeng@foxmail.com] * @Date 2017/6/6 17:52 * 实体学生类 */ public class Student { private String name; //学生姓名 private String sno; //学号 private Integer age; //年龄 private Integer sex; //性别 public Student (){} //set....get... }[注意] 由于前端传送的对象数据只包含 name,sno 两个属性的对象 因此我们就需要设计个DTO类
如果JS传输所有的属性,就尽可能使用Student原生类
2、后端设计DTO类
/** * @author Franz.ge [nizhigeng@foxmail.com] * @Date 2017/6/6 17:52 * 用于传输数据的对象 */ public class StudentDTO { private String name; //学生姓名 private String sno; //学号 //set....get... }3、js前端AJax代码
/** * 这里要说明下 data是一个DTO对象 * @param name * @param sno */ function studentWrite(name,sno){ // 这里传送的对象有多少属性,就要传送多少属性 // 所以一般都设计DTO var data = { name:name, sno:sno } $.ajax({ type:"POST", url:"http://localhost/tujing/assignStudent", data: JSON.stringify(data),//必要 dataType:"json", contentType:"application/json", async: false, cache:false, success:function(data){ if(data.status=="success"){ console.debug('----------------插入数据库成功------------------'); }else{ console.debug('----- ----------插入数据库失败------------------'); } } }); }4、SpringMVC后端
/** * 获取用户其他信息 * Ajax写进数据库 */ @ResponseBody @RequestMapping(value = {"assignStudent", "assignStudent"}, method = RequestMethod.POST) public Object assignStudent(HttpServletResponse response, @RequestBody StudentDTO studentDTO ) { //获取DTO数据对象,处理业务 boolean isSuccess = studentService.save(new Student(studentDTO)); Map<String, String> map = new HashMap<String, String>(); if (isSuccess) { map.put("status", "successs"); } else { map.put("status", "fail"); } return map; }[总结] JS传输对象给后台,一般采用DTO对象 如果出现[HTTP 400 错误 - 请求无效 (Bad request)]
原因:1)前端提交数据的字段名称或者是字段类型和后台的实体类不一致,导致无法封装; 2)前端提交的到后台的数据应该是json字符串类型,而前端没有将对象转化为字符串类型; 解决方案: 1)对照字段名称,类型保证一致性 2)使用stringify将前端传递的对象转化为字符串 data: JSON.stringify(data) ;
Franz.寄语:让优秀成为一种习惯。2017.06.07 Write