05【SpringMVC的数据绑定】_springmvc实体数据绑定到方法

package com.dfbz.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/\*\*
 \* @author lscl
 \* @version 1.0
 \* @intro:
 \*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class City {

    private Integer id;         // 城市id
    private String cityName;    // 城市名称
    private Double GDP;         // 城市GDP,单位亿元
    private Boolean capital;    // 是否省会城市
}

  • Controller:
/\*\*
 \* 封装包装数据类型
 \* @param city
 \* @param response
 \* @throws IOException
 \*/
@RequestMapping("/demo02")
public void demo02(City city, HttpServletResponse response) throws IOException {

    response.setContentType("text/html;charset=utf8");
    response.getWriter().write("id= " + city.getId() + "<hr>");
    response.getWriter().write("cityName= " + city.getCityName() + "<hr>");
    response.getWriter().write("GDP= " + city.getGDP() + "<hr>");
    response.getWriter().write("capital= " + city.getCapital() + "<hr>");
}

表单:

Demo02.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>测试对象参数绑定</h3>
<form action="/demo/demo02.form" method="post">
    <input type="text" name="id" placeholder="城市id">
    <input type="text" name="cityName" placeholder="城市名称">
    <input type="text" name="GDP" placeholder="城市GDP">
    <input type="text" name="capital" placeholder="是否省会城市(true/false)">

    <input type="submit" value="测试参数类型绑定">
</form>
<br>
<hr>
</body>
</html>

5.2.3 数组和集合类型
1)数组
  • Controller:
/\*\*
 \* 测试数组类型绑定
 \* @param ids
 \* @param response
 \* @throws IOException
 \*/
@RequestMapping("/demo03")
public void demo03(Integer[] ids, HttpServletResponse response) throws IOException {

    response.setContentType("text/html;charset=utf8");
    response.getWriter().write(Arrays.toString(ids));
}

  • 表单:
  • Demo03.jsp:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>测试数组类型绑定</h3>
<form action="/demo/demo03.form" method="post">
    <input type="checkbox" value="1" name="ids">
    <input type="checkbox" value="2" name="ids">
    <input type="checkbox" value="3" name="ids">

    <input type="submit" value="数组类型绑定">
</form>
<br>
<hr>
</body>
</html>

既然能使用数组,那能不能使用List或者Set集合接收呢?

答案是不能的 ,SpringMVC默认不支持集合类型来接收前端参数;(我们可以使用@RequestParam注解解决这个问题)

如果直接使用List或者Set,那么

必看视频!获取2024年最新Java开发全套学习资料 备注Java

出现如下错误:

HTTP Status 500 - Request processing failed; nested exception is java.lang.IllegalStateException: No primary or default constructor found for interface java.util.List

在这里插入图片描述

2)List集合

List和Set集合一样,都需要使用@RequestParam注解来进行参数的绑定;

  • Controller:
/\*\*
 \* 测试集合类型
 \* @param ids
 \* @param response
 \* @throws IOException
 \*/
@RequestMapping("/demo04")
// public void demo04(@RequestParam List<Integer> ids, HttpServletResponse response) throws IOException {
public void demo04(@RequestParam Set<Integer> ids, HttpServletResponse response) throws IOException {

    response.setContentType("text/html;charset=utf8");

    response.getWriter().write(ids.toString());
}

3)Map集合

绑定Map集合和List、Set集合一样,需要借助@RequestParam注解来进行绑定;

  • Controller:
/\*\*
 \* 测试数组类型绑定
 \* @param cityMap
 \* @param response
 \* @throws IOException
 \*/
@RequestMapping("/demo05")
public void demo05(@RequestParam Map<String,Object> cityMap, HttpServletResponse response) throws IOException {

    response.setContentType("text/html;charset=utf8");

    response.getWriter().write(cityMap.toString());
}

  • 表单:
  • Demo05.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>测试Map数据绑定</h3>
<hr>
<form action="/demo/demo05.form" method="post">
    <input type="text" name="id" placeholder="城市id">
    <input type="text" name="cityName" placeholder="城市名称">
    <input type="text" name="GDP" placeholder="城市GDP">
    <input type="text" name="capital" placeholder="是否省会城市(true/false)">

    <input type="submit" value="测试Map数据绑定">
</form>
</body>
</html>

4)Pojo包装类型

定义一个PoJo包装类:

package com.dfbz.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.List;
import java.util.Map;

/\*\*
 \* @author lscl
 \* @version 1.0
 \* @intro:
 \*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Pojo {

    // List<T> 类型
    private List<City> cityList;

    // List<Map> 类型
    private List<Map<String,Object>> cityMapList;

    // 对象类型
    private City city;

    // List<普通> 类型
    private List<Integer> ids;

    // 数组类型
    private String[] cityNames;

}

  • Controller:
/\*\*
 \* 测试pojo类型
 \* @param pojo
 \* @param response
 \* @throws IOException
 \*/
@RequestMapping("/demo06")
public void demo06(Pojo pojo, HttpServletResponse response) throws IOException {

    response.setContentType("text/html;charset=utf8");

    System.out.println(pojo);

    response.getWriter().write(pojo.toString());
}

  • 表单:
  • Demo06.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h3>测试参数类型绑定</h3>
<form action="/demo/demo06.form" method="get">
    <h3>数组类型: cityNames</h3>
    <input type="checkbox" name="cityNames" value="广州">
    <input type="checkbox" name="cityNames" value="佛山">
    <input type="checkbox" name="cityNames" value="东莞">

    <hr>

    <h3>集合类型List cityList </h3>
    <input type="text" name="cityList[0].id" placeholder="请输入城市id" value="1">
    <input type="text" name="cityList[0].cityName" placeholder="请输入城市名称" value="南宁">
    <input type="text" name="cityList[0].GDP" placeholder="请输入城市GDP" value="30000.0D">
    <input type="text" name="cityList[0].capital" placeholder="是否省会城市" value="true">

    <hr>
    <input type="text" name="cityList[1].id" placeholder="请输入城市id" value="2">
    <input type="text" name="cityList[1].cityName" placeholder="请输入城市名称" value="柳州">
    <input type="text" name="cityList[1].GDP" placeholder="请输入城市GDP" value="20000.0D">
    <input type="text" name="cityList[1].capital" placeholder="是否省会城市" value="true">

    <hr>
    <h3>List(Map) 类型 cityMapList</h3>
    <input type="text" name="cityMapList[0]['id']" placeholder="请输入城市id" id="1">
    <input type="text" name="cityMapList[0]['cityName']" placeholder="请输入城市名称" value="昆明">
    <input type="text" name="cityMapList[0]['GDP']" placeholder="请输入城市GDP" value="30000.0D">
    <input type="text" name="cityMapList[0]['capital']" placeholder="是否省会城市" value="true">

    <hr>
    <input type="text" name="cityMapList[1]['id']" placeholder="请输入城市id" value="2">
    <input type="text" name="cityMapList[1]['cityName']" placeholder="请输入城市名称" value="香格里拉">
    <input type="text" name="cityMapList[1]['GDP']" placeholder="请输入城市GDP" value="30000.0D">
    <input type="text" name="cityMapList[1]['capital']" placeholder="是否省会城市" value="false">


    <hr>
    <h3>对象类型:City</h3>
    <input type="text" name="city.id" placeholder="请输入城市id" value="1">
    <input type="text" name="city.cityName" placeholder="请输入城市名称" value="福州">
    <input type="text" name="city.GDP" placeholder="请输入城市GDP" value="10000.0D">
    <input type="text" name="city.capital" placeholder="是否省会城市" value="true">

    <h3>List普通类型:ids</h3>
    <input type="text" name="ids" placeholder="请输入城市id" value="1">
    <input type="text" name="ids" placeholder="请输入城市id" value="2">
    <input type="text" name="ids" placeholder="请输入城市id" value="3">

    <input type="submit" value="测试参数类型绑定">
</form>

</body>
</html>

5.2 内置参数自动绑定

5.2.1 ServletAPI:
  • HttpServletRequest
  • HttpServletResponse
  • HttpSession

SpringMVC在处理一个handler时,会默认准备好request、response、session这些原生的ServletAPI,我们可以直接传递进Handler方法

  • Controller:
/\*\*
 \* 测试servlet原生API
 \* @param request
 \* @param response
 \* @param session
 \* @throws IOException
 \*/
@RequestMapping("/demo07")
public void demo07(
        HttpServletRequest request,
        HttpServletResponse response,
        HttpSession session) throws IOException {
   
    session.setAttribute("sessionVal","hello session!");
    
    response.sendRedirect("/hello.jsp");
}

编写一个jsp页面,取出session域的值;

5.2.2 SpringMVC内置对象
  • Model:是一个接口,存储的数据存放在request域
  • ModelMap:是一个类,存储的数据存放在request域
  • ModelAndView:包含数据和视图;

Model和ModelMap默认都是存储了Request请求作用域的数据的对象,这个两个对象的作用是一样,就将数据返回到页面

  • Controller:
/\*\*
 \* 测试SpringMVC内置对象
 \*
 \* @param model
 \* @param modelMap
 \* @throws IOException
 \*/
@RequestMapping("/demo08")
public String demo08(
        Map<String, Object> map,
        Model model,
        ModelMap modelMap) throws IOException {


    map.put("mapMsg", "hello map!");
    model.addAttribute("modelMsg", "hello model!");
    modelMap.addAttribute("modelMapMsg", "hello modelMap!");

    System.out.println(map.getClass());         // BindingAwareModelMap
    System.out.println(model.getClass());       // BindingAwareModelMap
    System.out.println(modelMap.getClass());    // BindingAwareModelMap

    return "forward:/Demo08.jsp";
}

  • 页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>


### 最后

这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)

![image](https://img-blog.csdnimg.cn/img_convert/311daea062553777e0ada9456f792cbe.webp?x-oss-process=image/format,png)

![image](https://img-blog.csdnimg.cn/img_convert/0ffe705735f4c9cb166643487ad877e9.webp?x-oss-process=image/format,png)



stem.out.println(modelMap.getClass());    // BindingAwareModelMap

    return "forward:/Demo08.jsp";
}

  • 页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>


### 最后

这份《“java高分面试指南”-25分类227页1000+题50w+字解析》同样可分享给有需要的朋友,感兴趣的伙伴们可挑战一下自我,在不看答案解析的情况,测试测试自己的解题水平,这样也能达到事半功倍的效果!(好东西要大家一起看才香)

[外链图片转存中...(img-TioI59Bf-1716377174722)]

[外链图片转存中...(img-3hta4Qxf-1716377174723)]



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值