关于 Spring 的RESTful CRUD

关于 Spring 的RESTful CRUD

要求:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

下面分布来介绍一下 ,,
这个案例的重中之重 是将hander 这个中间类写好,,整个过程就不算难

dao:为了达到实验的目的,就不和数据库交互了,直接将数据存放在dao中

package com.liusir.spring.crud.dao;

import java.util.Collection;
import java.util.HashMap;
import java.util.Map;

import org.springframework.stereotype.Repository;

import com.liusir.spring.crud.enties.Department;

@Repository
public class DepartmentDao {

	private static Map<Integer, Department> departments = null;
	
	static{
		departments = new HashMap<Integer, Department>();
		
		departments.put(101, new Department(101, "D-AA"));
		departments.put(102, new Department(102, "D-BB"));
		departments.put(103, new Department(103, "D-CC"));
		departments.put(104, new Department(104, "D-DD"));
		departments.put(105, new Department(105, "D-EE"));
	}
	
	public Collection<Department> getDepartments(){
		return departments.values();
	}
	
	public Department getDepartment(Integer id){
		return departments.get(id);
	}
	
}

其中 Employee的dao中的信息:

private static Map<Integer, Employee> employees = null;
	
	@Autowired
	private DepartmentDao departmentDao;
	
	static{
		employees = new HashMap<Integer, Employee>();

		employees.put(1001, new Employee(1001, "E-AA", "aa@163.com", 1, new Department(101, "D-AA")));
		employees.put(1002, new Employee(1002, "E-BB", "bb@163.com", 1, new Department(102, "D-BB")));
		employees.put(1003, new Employee(1003, "E-CC", "cc@163.com", 0, new Department(103, "D-CC")));
		employees.put(1004, new Employee(1004, "E-DD", "dd@163.com", 0, new Department(104, "D-DD")));
		employees.put(1005, new Employee(1005, "E-EE", "ee@163.com", 1, new Department(105, "D-EE")));
	}
	

第一步 操作:显示操作显示具体的人员信息

<c:forEach items="${requestScope.employees }" var="emp">
				<tr>
					<td>${emp.id }</td>
					<td>${emp.lastName }</td>
					<td>${emp.email }</td>
					<td>${emp.gender == 0 ? 'Female' : 'Male' }</td>
					<td>${emp.department.departmentName }</td>
					<td><a href="emp/${emp.id}">Edit</a></td>
					<td><a class="delete" href="emp/${emp.id}">Delete</a></td>
				</tr>
			</c:forEach>

其中的hander操作,比起servlet来说 hander的方法简单的多

@RequestMapping("/emps")
	public String list(Map<String, Object> map){
		map.put("employees", employeeDao.getAll());
		return "list";
	}
	

第二步操作:是添加用户信息,用的是post操作来i添加用户的信息
hander 的操作
1.显示通过emp/ put 方法转到input界面

@RequestMapping(value="/emp", method=RequestMethod.GET)
	public String input(Map<String, Object> map){
		map.put("departments", departmentDao.getDepartments());
		map.put("employee", new Employee());
		return "input";
	}

这里加上 map的两行代码 ,是为了作回显操作。 要不会报错

这里是post操作, 下面的是用过的form标签来进行 解释,,form标签的使用下一章博客会进行讲解

		<c:if test="${employee.id == null }">
			<!-- path 属性对应 html 表单标签的 name 属性值 -->
			LastName: <form:input path="lastName"/>
			<form:errors path="lastName"></form:errors>
		</c:if>
		Email: <form:input path="email"/>
		<!-- 这是错误的验证,返回的值会被  -->
		<form:errors path="email"></form:errors>
		<br>
		<% 
			Map<String, String> genders = new HashMap();
			genders.put("1", "Male");
			genders.put("0", "Female");
			
			request.setAttribute("genders", genders);
		%>
		Gender: 
		<br>
		<!--delimiter:是为了换行,分隔开。  -->
		<form:radiobuttons path="gender" items="${genders }" delimiter="<br>"/>
		<br>
		<!--这个就是在method=get方法中得到的departments回显操作  -->
		Department: <form:select path="department.id" 
			items="${departments }" itemLabel="departmentName" itemValue="id"></form:select>
		<br>
			
		Birth: <form:input path="birth"/>
		<form:errors path="birth"></form:errors>
		<br>
		Salary: <form:input path="salary"/>
		<br>
		<input type="submit" value="Submit"/>
	</form:form>

hander的代码,其中的@Valid 和 Errors 是用来进行 校验和 返回错误信息的两个注解。
注意: 需校验的 Bean 对象和其绑定结果对象或错误对象时成对出现的,它们之间不允许声明其他的入参
:例如 :public String save(@Vild Employee employee-这之间- Errors result)

@RequestMapping(value="/emp", method=RequestMethod.POST)
	public String save(@Valid Employee employee, Errors result, 
			Map<String, Object> map){
		
		if(result.getErrorCount() > 0){
			System.out.println("出错了!");
			
			for(FieldError error:result.getFieldErrors()){
				System.out.println(error.getField() + ":" + error.getDefaultMessage());
			}
			
			//若验证出错, 则转向定制的页面
			map.put("departments", departmentDao.getDepartments());
			return "input";
		}
		//employee 对象是pojo自动将修改的加进来 。
		employeeDao.save(employee);
		return "redirect:/emps";
	}

第三步操作是:delete操作,method方法是delete方法
这里为什么会用到jq 是因为,在整体的用户信息的操作的是时候是 get的操作,所以需要delete来单独抽出来 进行显示。

$(function(){
	
	$(".delete").click(function(){
		var href = $(this).attr("href");
		//将点击delete 的时候将其form方法转为delete方式 
		$("form").attr("action", href).submit();			
		return false;
	});
})

<td><a class="delete" href="emp/${emp.id}">Delete</a></td>

deletehander的方法使用:

//这里是删除的操作
	@RequestMapping(value="/emp/{id}", method=RequestMethod.DELETE)
	public String delete(@PathVariable("id") Integer id){
		employeeDao.delete(id);
		return "redirect:/emps";
	}

删除操作,没有太多难懂的。

第四步:是修改操作,最难的一步操作

注意:修改操作 是不能修改姓名的,form表单的使用

			<c:if test="${employee.id != null }">
			<form:hidden path="id"/>
			<input type="hidden" name="_method" value="PUT"/>
			<%-- 对于 _method 不能使用 form:hidden 标签, 因为 modelAttribute 对应的 bean 中没有 _method 这个属性 --%>
			<%-- 
			<form:hidden path="_method" value="PUT"/>
			--%>
			</c:if>

hander 操作的使用:
不能修改 LastName的值就用得到 ModelAndView的操作
之前的博客 ModelAndAttribut的使用方法

@ModelAttribute
	public void getEmployee(@RequestParam(value="id",required=false) Integer id,
			Map<String, Object> map){
		if(id != null){
			map.put("employee", employeeDao.get(id));
		}	
	}
	
	//修改操作。
	@RequestMapping(value="/emp", method=RequestMethod.PUT)
	public String update(Employee employee){
		employeeDao.save(employee);
		
		return "redirect:/emps";
	}

四种Restful风格的CRUD的风格的操作

想要源码的可以 在评论区里面私聊。 加油 !

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值