spring MVC 示意图

spring MVC执行过程

- 用户端发送请求至前端控制器 DispatcherServlet
- DispatcherServlet接收到请求后调用处理器映射器 HandlerMapping
- 处理器映射器根据URL 找到具体的处理器,生成处理器执行链HandlerExcutionChain(包含处理器对象和处理器拦截器),将处理器执行链返回给DispatcherServlet
- DispatcherServlet根据处理器Handler获取处理器适配器HandlerAdapter,并执行HanderAdapter的一系列操作,比如:参数封装、数据格式转换、数据校验等
- 执行处理器Handler(Controller层,也叫页面控制器)
- Handler返回MoudelAndView
- HandlerAdapter将Handler的执行结果MoudelAndView返回到DispatcherServlet
- DispatcherServlet将MoudelAndView传给ViewReslover 视图解析器
- ViewReslover解析完后返回View
- DispatcherServlet将视图进行渲染(即将模型数据moudel填充至视图)----------此处处理器执行链HandlerExcutionChain执行完成,拦截器中的完成后执行,就在这一步骤后面
- DispatcherServlet响应用户
参数控制
@RequestMapping("/index")
@ResponseBody
private Result getBannerList(@RequestParam("num") Integer number){
return null;
}
- 传递数组:前端入参:http://localhost:8080/my/requestArray?intArr=1,2,3&longArr=4,5,6&strArr=str1,str2,str3
@GetMapping("/requestArray")
@ResponseBody
public Map<String, Object> requestArray(
int [] intArr, Long []longArr, String[] strArr) {
Map<String, Object> paramsMap = new HashMap<>();
paramsMap.put("intArr", intArr);
paramsMap.put("longArr", longArr);
paramsMap.put("strArr", strArr);
return paramsMap;
}
- 传递JSON:@RequestBody ,传入的JSON字符串会根据字段自动转化为对象

@PostMapping("/insert")
@ResponseBody
public User insert(@RequestBody User user) {
userService.insertUser(user);
return user;
}
}
- 获取格式化参数:
下面代码中是日期格式化和 千分位的金额字符串格式化
前端的入参为 date=“2020-05-24” number=“1,222,333”
@GetMapping("/format/form")
public String showFormat() {
return "/format/formatter";
}

@PostMapping("/format/commit")
@ResponseBody
public Map<String, Object> format(@DateTimeFormat(iso=ISO.DATE) Date date,
@NumberFormat(pattern = "#,###.##") Double number) {
Map<String, Object> dataMap = new HashMap<>();
dataMap.put("date", date);
dataMap.put("number", number);
return dataMap;
}
参数验证和一对一入参格式转换
使用数据模型

@RequestMapping("/data")
@Controller
public class DataModelController {
@Autowired
private UserService userService = null;

@GetMapping("/model")
public String useModel(Long id, Model model) {
User user = userService.getUser(id);
model.addAttribute("user", user);
return "data/user";
}

@GetMapping("/modelMap")
public ModelAndView useModelMap(Long id, ModelMap modelMap) {
User user = userService.getUser(id);
ModelAndView mv = new ModelAndView();
mv.setViewName("data/user");
modelMap.put("user", user);
return mv;
}

@GetMapping("/mav")
public ModelAndView useModelAndView(Long id, ModelAndView mv) {
User user = userService.getUser(id);
mv.addObject("user", user);
mv.setViewName("data/user");
return mv;
}
}