restful的认识和使用(包括controller、service、前端ajax的整个代码示例)

一、restful的认识
(1)RESTful是一种架构的规范与约束、原则,符合这种规范的架构就是RESTful架构。
(2)简单概括
/emp/{id} GET查询一个员工
/emp GET查询所有员工
/emp POST保存一个员工
/emp/{id} PUT修改一个员工
/emp/{id} DELETE删除一个员工
二、具体使用
(1)根据id查询一个员工
------controller端-----

@RequestMapping("/emp/{empId}")
@ResponseBody
public Emp getEmpById(@PathVariable Long empId) {
	Emp emp= empService.getEmpById(empId);
	return emp;
}
<!--Emp就一个pojo-->

------serviceImpl端-----

@Override
public Emp getEmpById(long empId) {
	Emp emp = empMapper.selectByPrimaryKey(empId);
	return emp;
}

------前端的ajax-----

function getEmp(empId){
	$.ajax({
		url : "${Pro_Path}/emp/"+empId,
		type : "GET",
		//请求成功的回调函数
		success : function(result) {
			$("#一个input的id").val(result.empName);
		}
	});
}

(2)查询所有员工
------controller端-----

<!-- 分页查询的参数:page传入页码,rows以及每页的大小-->
@RequestMapping("/emp/list")
@ResponseBody
public PageInfo getEmpList(Integer page, Integer rows) {
	return empService.getEmpList(page, rows);
}

------serviceImpl端-----

public PageInfo getEmpList(int page, int rows) {
	//设置分页信息
	PageHelper.startPage(page, rows);
	//执行查询
	EmpExample example = new EmpExample();
	List<Emp> list = empMapper.selectByExample(example);
	//取查询结果
	PageInfo<Emp> pageInfo = new PageInfo<>(list);
	//返回结果
	return pageInfo;
}

------前端的ajax-----

function to_page(page) {
	$.ajax({
		url : "${Pro_Path}/emp/list",
		data: '{"page": page, "rows": 8}',
		type : "GET",
		//请求成功的回调函数
		success : function(result) {
				//数据表单展示:
				$.each(result.list,function(index, item) {
					//将表格内容显示出来
					var checkBoxTd=$("<td><input type='checkbox'/></td>");
					var empIdTd = $("<td></td>").append(item.empId);
					var empNameTd = $("<td></td>").append(item.empName);
					$("<tr></tr>").append(checkBoxTd).append(empIdTd).append(empNameTd).appendTo("#tbody的id");
				});
				页面情况展示:
				$("#div的id").append("当前第" + result.pageNum + "页  共有" + result.pages+ "页  总计" + result.total + "条记录");
				页数导航:
				var ul = $("<ul></ul>");
				$.each(result.navigatepageNums, function(index, item) {
					var eachPgaeNumLi = $("<li></li>").append(
							$("<a></a>").append(item));
					//添加单击事件
					eachPgaeNumLi.click(function() {
						to_page(item);
					});
					ul.append(eachPgaeNumLi);
				});
				var navEle = $("<nav></nav>").append(ul);
				navEle.appendTo("#div的id");
		}
	});
}

(3)保存一个员工
------controller端-----

//保存员工(一般有用到jsr303校验)
@RequestMapping(value="/saveEmp",method=RequestMethod.POST)
@ResponseBody
public DataResult saveEmp(@Valid Employee employee,BindingResult result) {
	if(result.hasErrors()) {
		Map<String,Object> map=new HashMap<String,Object>();
		//result校验失败,应该返回失败 ,在模态框中显示校验失败的错误信息
		List<FieldError> errors=result.getFieldErrors();
		for (FieldError fieldError : errors) {
			map.put(fieldError.getField(), fieldError.getDefaultMessage());
		}
		DataResult.build( DataResult.error ,null, map);
	}else {
		return employeeService.saveEmp(employee);
	}
}
<!--DataResult是一个处理结果的pojo,
包含属性 :
响应业务状态 private Integer status; 
响应消息 private String msg;
响应中的数据 private Object data; -->

------serviceImpl端-----

public DataResult saveEmp(Employee employee) {
	employeeMapper.insertSelective(employee);
	return DataResult.ok();
}

------前端的ajax-----

$.ajax({
	url:"${Pro_Path}/saveEmp",
	type:"POST",
	data:$("#form的id").serialize(),
	success:function(result){
		//保存成功后:
		if(result.status==100){
			。。。此处省略。。。
		}else{
			// 保存失败后
			//如果有邮箱的错误信息
			if(result.data.email!=undefined){
					。。。此处省略。。。
			}
			//如果有用户名的错误
			if(result.data.empName!=undefined){
					。。。此处省略。。。
			}
		}				
	}
});

(4)根据id修改某个实体
------controller端-----

/*
 * 根据id修改员工
 * 注意传递的id名字要和Employee 的属性名一样
 */
@RequestMapping(value="/updateEmp/{empId}",method=RequestMethod.PUT)
@ResponseBody
public DataResult updateEmp(Employee employee) {
	return employeeService.updateEmp(employee);	
}

------serviceImpl端-----

public DataResult updateEmp(Employee employee) {
		employeeMapper.updateByPrimaryKeySelective(employee);
		return DataResult.ok();
}

------前端的ajax-----

var id=$(this).attr("edit-id");
$.ajax({
	url : "${Pro_Path}/updateEmp/"+id,
	type : "POST",
	data:$("#form的id").serialize()+"&_method=PUT",
	success : function(result) {
	
	}
});

(5)删除一个用户
------controller端-----

	@RequestMapping(value="/deleteEmpById/{id}",method=RequestMethod.DELETE)
	@ResponseBody
	public DataResult deleteEmpById(@PathVariable("id")Integer id) {
		return employeeService.deleteEmpById(id);
	}

------serviceImpl端-----

public DataResult deleteEmpById(Integer id) {
	employeeMapper.deleteByPrimaryKey(id);	
	return DataResult.ok();
}

------前端的ajax-----

$.ajax({
	url : "${Pro_Path}/deleteEmpById/"+empId,
	type : "DELETE",
	success : function(result) {
		
	}
});

(6)批量删除多个用户
------controller端-----

@RequestMapping(value="/deleteEmpsById/{ids}",method=RequestMethod.DELETE)
@ResponseBody
public ProcessMsg deleteEmpsById(@PathVariable("ids")String ids) {
	//如果是多个id
	if(ids.contains("-")) {
		String[] str_id=ids.split("-");
		List<Integer> list_id=new ArrayList<Integer>();
		for(String item_id:str_id) {
			list_id.add(Integer.parseInt(item_id));
		}
		return employeeService.deleteBatch(list_id);
	//如果是一个id
	}else {
		return employeeService.deleteEmpById(Integer.parseInt(ids));
	}
}

------serviceImpl端-----

public DataResult deleteBatch(List<Integer> str_id) {
	EmployeeExample employeeExample=new EmployeeExample();
	Criteria criteria=employeeExample.createCriteria();
	criteria.andEmpIdIn(str_id);
	employeeMapper.deleteByExample(employeeExample);
	return DataResult.ok();
}
public DataResult deleteEmpById(Integer id) {
	employeeMapper.deleteByPrimaryKey(id);	
	return DataResult.ok();
}

------前端的ajax-----

$("#emp_delete_all_btn").click(function() {
	var del_id_str="";
	$.each($(".check_item:checked"),function(){
		del_id_str+=$(this).parents("tr").find("td:eq(1)").text()+"-";
	});
	//去除最后一个逗号,分号
	del_id_str=del_id_str.substring(0 , del_id_str.length-1);
	$.ajax({
		url : "${Pro_Path}/deleteEmpsById/"+del_id_str,
		type : "DELETE",
		success : function(result) {

		}
	});
});

猜你喜欢

转载自blog.csdn.net/ranandrun/article/details/82933622