【学习笔记】SpringMVC 参数与返回值

SpringMVC的参数绑定

测试URL:http://localhost:8080/demo.action?username=zzz&password=123

传统方式获取参数
在javaweb中我们使用request.getparameter来获得页面传来的参数,在springmvc中同样适用,但是同时也失去了springmvc的作用
在这里插入图片描述
使用springmvc获取参数:

方式一
使用实参名作为形参名字,springmvc会自动映射
在这里插入图片描述
若页面以数组形式提交(用于批量操作,如复选框),同样也是需要名字对应
在这里插入图片描述
如果你的形参的名字和页面传入的参数名字不一致,则可以使用@RequestParam
在这里插入图片描述
注解可选参数

  • required = true : 表示该参数必须给值 ,如果没有给这个值,则出现400页面
  • defaultValue = “123” :如果给了参数,就获取,如果没有给参数,则默认为123

方式二
使用对象来接受参数,方法的参数可以不同名,但是需要对象中的字段同名
在这里插入图片描述
对于数组来说也一样需要同名
在这里插入图片描述
对于对象中的引用数据类型来说,我们在页面回写时通过引用对象.属性来获得
在这里插入图片描述

参数Model

当我们需要向页面传递参数时,我们需要在方法的参数中添加Model

Model是SpingMVC提供的一个模型类,该类不需要自己创建对象,系统自动创建
Model作用 Model可以用来向页面传递参数
后台代码 model.addAttribute(“item”, item);

传统方式向页面传参
在这里插入图片描述
使用Model向页面传参
在这里插入图片描述

SpringMVC的返回值

Spring MVC的控制器方法返回值可以支持多种写法,每种写法的场景和效果都不一样。

  • void 为空
  • ModelAndView 模型和试图
  • String 字符串

void

如果确实没有返回值,那就返回 void ,但是一定要注意,此时,方法上需要添加 @ResponseBody注解,为什么呢?当控制器上只有注解@ResquestMapping时,返回值是什么都会有跳转效果,如果跳转的资源没有找到就会报404。如果不想跳转,就需要在页面添加@ResponseBody注解,给注解表示恒不跳转。

String

当返回值是普通字符串时,要分两种情况
没有@ResponseBody注解时:springmvc 会把字符串当作一个资源路径进行跳转,默认是跳转

@RequestMapping("demo2")
public String demo2() {
		..
		// 没有配置试图解析器,资源路径需要写全
		return "/index.jsp";
		// 配置了试图解析器只需要写资源名称即可
		return "index";
		// 表示以转发的方式访问资源,默认就是转发方式,所以可以省略forword
		// 但是如果写了forword,就必须写全资源路径,因为写了forword就意味着不使用视图解析器,重定向也是
		return "forword:index.jsp";
		// 重定向
		return "redirect:index.jsp";
	}

@ResponseBody注解时:该注解会把响应头 ConteentType 设置为 text/html, 把方法返回值以流的形式直接输出,如果返回值包含中文,会出现中文乱码。需要在 @RequestMapping 设置 produces 参数,produces参数 表示响应头中 Content-Type 取值

@RequestMapping(value="demo12", produces="text/html;charset=utf-8")
@ResponseBody
public String demo12() {
	return "中文";
}

对象转json

当返回值满足 key-value 形式时(返回值可以是 对象、list集合、map集合)
当返回值满足这种情况,该注解会把响应头设置为 application/json;charset=utf-8,不会乱码 ,此时会把数据转换为 json 格式后,以输出流的形式响应给客户端,底层使用 Jackson 进行 json 转换,在项目中一定要导入 jackson 的包

<!--jackson -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.8</version>
        </dependency>

总结:
有@ResponseBody时

  • String +ResponseBody = 返回值为String
  • 对象+ResponseBody = json
  • void+ResponseBody = 无返回

没有@ResponseBody时,就是跳转到页面

json转对象

当页面以json格式上传数据时,可以使用@RequestBody将json转成对象
示例:

在这里插入图片描述

ModelAndView

以前前后端不分的情况下,ModelAndView 应该是最最常见的返回值类型了,现在前后端分离后,后端都是以返回 JSON 数据为主了。后端返回 ModelAndView 这个比较容易理解,开发者可以在 ModelAndView 对象中指定视图名称,然后也可以绑定数据,该对象既可以存储数据到request域,也可以设置视图。其实Spring MVC任何处理器适配器最终执行完控制器后,都会返回ModelAndView对象,
(1)ModelAndView 是SPringMVC提供模型视图
(2)作用
设置数据 addObject(key,value)
设置页面setViewName(逻辑视图) 就是文件的名称

@Controller
public class Demo02ReturnController {
    //public 返回值类型 方法名(参数类型 参数名){}
    @RequestMapping(path = "demo01.action",method = {RequestMethod.POST,RequestMethod.GET})//回显页面
    public ModelAndView test01(){//
        Person p1 = new Person(1,"jack","1234");
        Person p2 = new Person(2,"rose","1234");
        List<Person> list = new ArrayList<Person>();
        list.add(p1);
        list.add(p2);

        //使用ModelAndView实现请求转发
        ModelAndView mv = new ModelAndView();
        mv.addObject("list",list);
        mv.setViewName("demo04_update_persons");//前缀+逻辑视图+后缀
        //物理视图 真正的文件地址 /WEB-INF/jsp/demo04_update_persons.jsp
        //物理视图 = 前缀+逻辑视图+后缀
        return mv;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值