Spring MVC的方法返回值和参数传递
1. SpringMVC方法的返回值类型
3.1String类作为返回值
3.1.1Controller层
/**
* 返回值类型为String时,一般用于返回视图名称
* 1、当方法返回值为null时,默认将请求路径当做视图 forward:/jsp/index.jsp 如果说没有视图解析器,返回值为null携带数据只能用json
* 2、当方法返回一个String的字符串时,当字符串为逻辑视图名时只返回视图,如果携带数据则使用request,session或者json
* 3、当方法返回值加入forward时代表转发,如果写为redirect:xxxx代表重定向,不是返回视图了,但是不会这样做!!
*/
@RequestMapping("/condRequest")
public String secondRequest(HttpServletRequest request, HttpServletResponse response){
request.setAttribute("user","张三");
return "forward:/jsp/index.jsp";
}
3.1.2页面

3.2void作为返回值
3.2.1Controller层
/**
* 如果方法写成了void就跟原来servlet含义是差不多 的
* json
*/
@RequestMapping(value = "/firstRequest",produces = "text/json;charset=utf-8")
public void firstRequest(HttpServletRequest request, HttpServletResponse response, HttpSession session) throws IOException {
Invoicing info=new Invoicing();
info.setUserName("张三");
info.setPassword("123");
/**
* json格式传递
*/
response.setCharacterEncoding("UTF-8");
String value= JSON.toJSONString(info);
response.getWriter().write(value);
}
3.2.2页面

3.3ModelAndView作为返回值
3.3.1Controller层
/**
* ModelAndView
* @param request 请求对象
* @param response 响应对象
* @return ModelAndView model是用来传递数据用的,view是所需要跳转的页面
*/
@RequestMapping("/model")
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response){
ModelAndView modelAndView=new ModelAndView();
//携带给页面数据
modelAndView.addObject("user","鸭头");
//指定跳转页面(视图解析器配置前后缀)
modelAndView.setViewName("index");
return modelAndView;
}
3.3.2页面

3.4Object作为返回值类型
3.4.1Controller层
/**
*Object
* 1.当方法返回值为null时,默认将请求路径当作视图 jsp/objectRequest.jsp 如果没有视图解析器,如果返回值为null携带数据只能用json
* 2.当方法返回值为String类型字符串时,就是视图的逻辑名称
* 3.当返回对象或者集合数据时要使用json格式字符串,可选fashjson手动转换 ,也可以使用jackson自动转换
*/
@RequestMapping("/objectRequest")
@ResponseBody
public Object objectRequest(){
List<Invoicing> invoicingList=new ArrayList<>();
Invoicing invoicing=new Invoicing();
invoicing.setUid(1);
invoicing.setUserName("aaa");
invoicing.setPassword("123");
invoicing.setRealName("张三");
invoicingList.add(invoicing);
return invoicingList;
}
3.4.2页面

2. Spring MVC的自动装配
4.1请求参数的自动类型转换
JSP页面创建表单
<form method="post" action="/formRequest">
姓名:<input id="userName" name="userName" class="userName"/><span></span><br/>
密码:<input id="password"name="password" class="password"/><br/>
<input type="submit" class="submit"/>
</form>
/**
* 接收零散参数:装配原则为传递参数名和方法接收参数名
* 手动装配@RequestParam name代表页面发送的参数名字 ,required代表参数是否必须传递 false
* 代表不传递,默认为true defaultValue代表默认 model代表给页面传递的数据
*/
@RequestMapping(value = "/formRequest")
public String formRequest(String userName,String password){
System.out.println(userName+"\t"+password);
return "welcome";
}
注意点*:控制器Controller中的方法参数名称必须和表单元素的name属性值保持一致

4.2使用@RequestParam注解
@RequestParam的作用是,当表单元素与控制器方法的参数不匹配的情况下,使用@RequestParam注解声明参数名称。
@RequestParam 有三个属性:
(1)value:请求参数名(必须配置)
(2)required:是否必需,默认为 true,即 请求中必须包含该参数,如果
没有包含,将会抛出异常(可选配置)
(3)defaultValue:默认值,如果设置了该值,required 将自动设为 false,
无论你是否配置了required,配置了什么值,都是 false(可选配置)
/**
* 接收零散参数:装配原则为传递参数名和方法接收参数名
* 手动装配@RequestParam name代表页面发送的参数名字 ,required代表参数是否必须传递 false
* 代表不传递,默认为true defaultValue代表默认 model代表给页面传递的数据
*/
@RequestMapping(value = "/formRequest")
public String formRequest(@RequestParam(name="userName",required = false,defaultValue = "张三")String username,@RequestParam(name = "password",required = false,defaultValue = "123")String password){
System.out.println(username+"\t"+password);
return "welcome";
}

4.3请求参数自动装配为对象
/*
* 对象参数:传递的对象参数和对象中的属性名保持一致
* */
@RequestMapping("/invoivingObject")
public String invoivingObject(Invoicing invoicing){
System.out.println(invoicing.getUserName());
return "welcome";
}

4.4restful风格参数传递
在使用 RESTful 风格之前,我们如果想要增加一条商品数据通常是这样的:

但是使用了 RESTful 风格之后就会变成:

/**
* get请求时,如果需要传递参数,那么则把不能使用以往的方式?name=xxx&age=yy,但是现在要遵循restful风格,例:xxx/ttt/ddd
* 根据地址栏url匹配拿值 使用@PathVariable(name=地址栏中的参数映射)
*
*/
@RequestMapping("/restfulRequest/{b}/{d}")
@ResponseBody
public String restfulRequest(@PathVariable(name = "b") String username, @PathVariable(name = "d")String password){
System.out.println(username+"\t"+password);
return "welcome";
}


4.5域属性对象传递参数
<form method="post" action="/invoivingObject">
姓名:<input id="userName" name="userName" class="userName"/><span></span><br/>
密码:<input id="password"name="password" class="password"/><br/>
teacherName1<input id="t_name" class="t_name" name="teacher.t_name"/>
<input type="submit" class="submit"/>
</form>
public class Invoicing {
private Integer uid;
private String userName;
private String password;
private String realName;
private Teacher teacher;
private List<Teacher> teachersList;
public List<Teacher> getTeachersList() {
return teachersList;
}
public void setTeachersList(List<Teacher> teachersList) {
this.teachersList = teachersList;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
@Override
public String toString() {
return "Invoicing{" +
"uid=" + uid +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
", realName='" + realName + '\'' +
", teacher=" + teacher +
", teachersList=" + teachersList +
'}';
}
}
/*
* 域属性传递:传递参数为:域属性名.属性名
* */
@RequestMapping("/invoivingObject")
public String invoivingObject(Invoicing invoicing){
System.out.println(invoicing.getUserName());
return "welcome";
}

4.6域属性集合传递参数
<form method="post" action="/invoivingObject">
姓名:<input id="userName" name="userName" class="userName"/><span></span><br/>
密码:<input id="password"name="password" class="password"/><br/>
teacherName2<input id="t_name" class="t_name" name="teachersList[0].t_name"/>
teacherName3<input id="t_name1" name="teachersList[1].t_name"/>
<input type="submit" class="submit"/>
</form>
public class Invoicing {
private Integer uid;
private String userName;
private String password;
private String realName;
private Teacher teacher;
private List<Teacher> teachersList;
public List<Teacher> getTeachersList() {
return teachersList;
}
public void setTeachersList(List<Teacher> teachersList) {
this.teachersList = teachersList;
}
public Teacher getTeacher() {
return teacher;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getRealName() {
return realName;
}
public void setRealName(String realName) {
this.realName = realName;
}
@Override
public String toString() {
return "Invoicing{" +
"uid=" + uid +
", userName='" + userName + '\'' +
", password='" + password + '\'' +
", realName='" + realName + '\'' +
", teacher=" + teacher +
", teachersList=" + teachersList +
'}';
}
}

/*
* 集合参数传递:集合名[下标].属性名
* */
@RequestMapping("/teacherInvoicing")
@ResponseBody
public String teacherInvoicing(Invoicing invoicing){
System.out.println(invoicing.getTeachersList());
return "welcome";
}

Spring MVC的方法返回值和参数传递的更多相关文章
- Spring MVC同一方法返回JSON/XML格式
最近一道面试题,要求同一API接口支持不同格式返回值.一开始是设想通过过滤器(Filter)设置返回值,但是并不可行,因为方法返回值一般都是类型需要做转换,而过滤器则是前置的.另一方面可以通过拦截器的 ...
- Spring MVC--------处理方法返回值的可选类型
对于Spring MVC处理方法支持支持一系列的返回方式: (1)ModelAndView (2)Model (3)ModelMap (4)Map (5)View (6)String (7)Void ...
- spring3 mvc:方法返回值的学习
新建后台代码用以测试返回类型,在这里我新建的如下: /** * 项目名称:Spring3mvc demo * Copyright ? 2010-2012 spartacus.org.cn All Ri ...
- Spring MVC中Controller返回值void时报错
Controller如下: 当使用url访问该处理器方法时,报错如下: 26-Jan-2019 21:16:28.105 警告 [http-nio-8080-exec-39] org.springfr ...
- spring mvc处理方法返回方式
Model: package org.springframework.ui; import java.util.Collection; import java.util.Map; public int ...
- Spring MVC学习之三:处理方法返回值的可选类型
http://flyer2010.iteye.com/blog/1294400 ———————————————————————————————————————————————————————————— ...
- Spring MVC 3.0 返回JSON数据的方法
Spring MVC 3.0 返回JSON数据的方法1. 直接 PrintWriter 输出2. 使用 JSP 视图3. 使用Spring内置的支持// Spring MVC 配置<bean c ...
- SpringBoot系列: Spring MVC视图方法的补充
SpringMVC 视图方法的参数, 已经在这个文章中写得非常清楚了, 链接为 https://www.cnblogs.com/morethink/p/8028664.html 这篇文章做一些补充. ...
- SpringMVC入门(二)—— 参数的传递、Controller方法返回值、json数据交互、异常处理、图片上传、拦截器
一.参数的传递 1.简单的参数传递 /* @RequestParam用法:入参名字与方法名参数名不一致时使用{ * value:传入的参数名,required:是否必填,defaultValue:默认 ...
随机推荐
- [ERROR] /D:/IDEA文件/travel/src/main/java/cn/itcast/travel/util/MailUtils.java:[1,1] 非法字符: '\ufeff'
报错: [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (defau ...
- 题解 CF1216C 【White Sheet】
虽然也很水,但这道还是比前两道难多了... 题目大意:给你三个位于同一平面直角坐标系的矩形,询问你后两个是否完全覆盖了前一个 首先,最直观的想法应该是,把第一个矩形内部每个整数点检查一下,看看是否位于 ...
- 05 IO流(三)——IO流标准流程
流程 选择源 选择合适的流 操作 关闭流:先打开的后关闭 演示 import java.io.File; import java.io.InputStream; import java.io.File ...
- idea 控制台 彩色打印日志
IDEA右上角:Edit Configurations,点击,找到VM options,填入-Dspring.output.ansi.enabled=ALWAYS. 重新启动应用,就会发现控制台日志变 ...
- js的for循环中出现异步函数,回调引用的循环值总是最后一步的值?
这几天跟着视频学习node.js,碰到很多的异步函数的问题,现在将for循环中出现的异步函数回调值的问题总结如下: 具体问题是关于遍历文件夹中的子文件夹的,for循环包裹异步函数的代码: for (v ...
- 在论坛中出现的比较难的sql问题:35(时间间隔计算问题)
原文:在论坛中出现的比较难的sql问题:35(时间间隔计算问题) 所以,觉得有必要记录下来,这样以后再次碰到这类问题,也能从中获取解答的思路.
- WPF不同方式快捷键判断
private void Window_PreviewKeyDown(object sender, KeyEventArgs e) { //单个按键e.Key方式判断 if (e.Key == Key ...
- C#基础之结构和类
大家在平时的工作中对类的使用应该是比较多的,但是在结构使用方面可能稍微少点,这里我就总结一下结构和类的一些异同之处,如有错误之处,还请指正. 结构是值类型,类是引用类型,结构通常用来封装小型相关变量组 ...
- 从客户发送http请求到服务器返回http之间发生了什么
由于我知识有限,可能会有模糊或者错误的地方,欢迎讨论与指正. 1.浏览器发出http请求 当用户访问一个url时,浏览器便会开始生成一个http请求. 首先获取http请求中所需要的参数,如url,c ...
- DBCP连接池原理分析(转载)
DBCP连接池介绍 ----------------------------- 目前 DBCP 有两个版本分别是 1.3 和 1.4. DBCP 1.3 版本需要运行于 JDK 1.4-1.5 ,支持 ...