springMvc - 04 前后端数据传递===
@RequestMapping(value = "returnType3")
public void returnType3(HttpServletRequest request, @NotNull HttpServletResponse response) throws Exception{
System.out.println("执行TestController");
List orderList = new ArrayList();
ex_Order item = new ex_Order();
item.setOrderId("T006");
item.setOrderDate(null);
orderList.add(item);
response.setContentType("text/html;charset=utf-8");
ObjectMapper jsonTool = new ObjectMapper();
response.getWriter().write(jsonTool.writeValueAsString(orderList));
}
1、Model和ModelAndView的区别
Model只是用来传输数据的,并不会进行业务的寻址。
ModelAndView则可以进行业务寻址,即可以设置对应的要请求的静态文件(jsp等)。
Model是每次请求可以自动创建的,放到方法参数上即可,而ModelAndView是需要自行new的。
2、处理器返回数据方式
处理方法常用的返回类型有:
1)String,返回的结果只包含逻辑视图名称,返回的数据通过Model对象传递。
@RequestMapping(value = "returnType1")
public String returnType1(Model model)
{
System.out.println("执行TestController");
List orderList = new ArrayList();
ex_Order item = new ex_Order();
item.setOrderId("T006");
item.setOrderDate(null);
orderList.add(item);
model.addAttribute("orderList",orderList);
return "/test/index";
}
2)ModelAndView,返回的结果包含数据和逻辑视图名称。
@RequestMapping(value ="/returnType2",method = RequestMethod.GET)
public ModelAndView returnType2() throws Exception {
System.out.println("执行TestController");
List orderList = new ArrayList();
ex_Order item = new ex_Order();
item.setOrderId("T006");
item.setOrderDate(null);
orderList.add(item);
//创建返回的视图对象
ModelAndView viewResult = new ModelAndView();
//添加返回的数据和视图,视图映射到/WEB-INF/jsp/test/index.jsp视图
viewResult.addObject("orderList",orderList);
viewResult.setViewName("/test/index");
return viewResult;
}
3)返回Void类型,这个是没有视图的返回结果,返回JSON的例子
具体返回什么内容,通过response.setContentType来设定。
@RequestMapping(value = "returnType3")
public void returnType3(HttpServletRequest request, @NotNull HttpServletResponse response) throws Exception{
System.out.println("执行TestController");
List orderList = new ArrayList();
ex_Order item = new ex_Order();
item.setOrderId("T006");
item.setOrderDate(null);
orderList.add(item);
response.setContentType("text/html;charset=utf-8");
ObjectMapper jsonTool = new ObjectMapper();
response.getWriter().write(jsonTool.writeValueAsString(orderList));
}
例如文件下载,图片输出,JSON结果等相关应用都是用该返回类型。
3、处理器接受数据方式
3.1、通过Request获取参数
最原始的方式,所有客户端提交的数据都可以通过该对象获取。
//获取某个参数的值
String id = request.getParameter("id");
System.out.println(id);
{
//获取数组参数的值
String[] list = request.getParameterValues("id");
for (String item:list)
{
System.out.println(item);
}
}
{
//获取所有请求的参数名信息
Enumeration list = (Enumeration) request.getParameterNames();
while (list.hasMoreElements()) {
String item = list.nextElement();
System.out.println(item);
}
}
3.2、简单类型绑定
只要请求的参数name值和处理器方法的参数名保持一致,则会自动把前端的参数值传递给处理器的参数。
3.3、Bean类型绑定
参数定义
数据请求
调试输出
3.4、集合类型绑定 - 简单变量方式1
3.5、集合类型绑定 - 复杂对象方式2
定义模型类:包含复杂类型的集合。
ItemsPo是一个复杂类型,内部包含很多的属性。
前端界面格式:
后台处理器方法:
3.6、集合类型绑定 - Map方式
定义模型类,包含Map对象
前端页面格式:
后台处理器方法:
集合方法引入自:https://blog.csdn.net/chizhuyuyu/article/details/82414259,未进行验证测试。
3.7、通过注解接受参数
@PathVariable(value = "name",defaultValue = "张三",required = true) String name
设定接受Get方式,Url中的请求参数,可以设定默认值,可以设定是否必须,并且可以设定前端参数名和变量名不统一。
@RequestParam(value = "name",defaultValue = "张三",required = true) String name
设定接受Get和Post提交请求方式,可以设定默认值,可以设定是否必须,并且可以设定前端参数名和变量名不统一。
@ModelAttribute(value = "order") ex_Order order
被@ModelAttribute注解的方法会在Controller每个方法执行之前都执行,因此对于一个Controller中包含多个URL的时候,要谨慎使用。