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) ;
网友评论