RestFul风格的请求以及拦截器
import java.util.Map;import javax.validation.Valid;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.validation.Errors;import org.springframework.validation.FieldError;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.PathVariable;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import com.atguigu.springmvc.crud.dao.DepartmentDao;import com.atguigu.springmvc.crud.dao.EmployeeDao;import com.atguigu.springmvc.crud.entities.Employee;@Controllerpublic class EmployeeHandler {@Autowiredprivate EmployeeDao employeeDao;@Autowiredprivate DepartmentDao departmentDao;@ModelAttributepublic 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";}@RequestMapping(value="/emp/{id}", method=RequestMethod.GET)public String input(@PathVariable("id") Integer id, Map<String, Object> map){map.put("employee", employeeDao.get(id));map.put("departments", departmentDao.getDepartments());return "input";}@RequestMapping(value="/emp/{id}", method=RequestMethod.DELETE)public String delete(@PathVariable("id") Integer id){employeeDao.delete(id);return "redirect:/emps";}@RequestMapping(value="/emp", method=RequestMethod.POST)public String save(@Valid Employee employee, Errors result, Map<String, Object> map){System.out.println("save: " employee);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";}employeeDao.save(employee);return "redirect:/emps";}@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";}@RequestMapping("/emps")public String list(Map<String, Object> map){map.put("employees", employeeDao.getAll());return "list";}//@InitBinder//public void initBinder(WebDataBinder binder){//binder.setDisallowedFields("lastName");//}}
拦截器
package com.atguigu.springmvc.interceptors;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;import org.springframework.web.servlet.ModelAndView;public class FirstInterceptor implements HandlerInterceptor{/** * 该方法在目标方法之前被调用. * 若返回值为 true, 则继续调用后续的拦截器和目标方法. * 若返回值为 false, 则不会再调用后续的拦截器和目标方法. * * 可以考虑做权限. 日志, 事务等. */@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response, Object handler) throws Exception {System.out.println("[FirstInterceptor] preHandle");return true;}/** * 调用目标方法之后, 但渲染视图之前. * 可以对请求域中的属性或视图做出修改. */@Overridepublic void postHandle(HttpServletRequest request,HttpServletResponse response, Object handler,ModelAndView modelAndView) throws Exception {System.out.println("[FirstInterceptor] postHandle");}/** * 渲染视图之后被调用. 释放资源 */@Overridepublic void afterCompletion(HttpServletRequest request,HttpServletResponse response, Object handler, Exception ex)throws Exception {System.out.println("[FirstInterceptor] afterCompletion");}}
赞 (0)