springMvc3 - 数据绑定

来源:https://www.bilibili.com/video/BV1GE411d7KE?p=3

上一节:https://blog.csdn.net/qq_40893824/article/details/107055793
下一节:https://blog.csdn.net/qq_40893824/article/details/107229346

数据绑定由 HandlerAdapter 完成

绑定 基本数据类型

1 controller 中,新建 实现类 DataBindHandler,加入代码:

package com.southwind.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("/data")
public class DataBindHandler {
    @RequestMapping("/baseType")
    @ResponseBody
    public String baseType(int id){
        return id + "";
    }
}

@ResponseBody,springMvc 会把值 直接返回给客户端

@ResponseBody,springMvc 会把值传给 DispatcherServlet,DisptacherServlet 调用 ViewResolver,对解析返回值,映射 JSP 资源

2 重启 tomcat,进入 http://localhost:8080/data/baseType?id=1

绑定 包装类

绑定基本数据类型(int),必须传参,绑定包装类(Integer)可以不传参
1 DataBindHandler 中,添加代码:

    @RequestMapping("/packageType")
    @ResponseBody
    public String packageType(Integer id){
        return id + "";
    }

包装类可接收 null,当 HTTP 请求无参数,包装类定义形参的数据类型,不会抛出异常

2 重启 tomcat,进入 http://localhost:8080/data/packageType

进入 http://localhost:8080/data/packageType?id=5

3 赋默认值
3.1 在 DataBindHandler 中,添加代码:
@RequestParam(value = "num", required = false, defaultValue = "0")

参数解释
valuehttp 请求时用的
http://localhost:8080/data/packageType?num=4
requiredtrue:value - num 必须赋值
false:value - num 可以不赋值,此时要有defaultValue
defaultValuevalue - num 没赋值时 的默认值

3.2 重启 tomcat,进入 http://localhost:8080/data/packageType

进入 http://localhost:8080/data/packageType?num=4

绑定 数组

包装类不能接收 1 个参数的多个值,数组可以
1 DataBindHandler 中,添加代码:

    @RequestMapping("/array")
    @ResponseBody
    public String array(String[] name){
        String str = Arrays.toString(name);
        return str;
    }

2 重启 tomcat,进入 http://localhost:8080/data/array?name=3&name=4&name=qwe

绑定 List

Spring MVC 不支持 List 类型的直接转换,List 集合需要进行包装
1
entity 中,新建 UserList,加入代码:

DataBindHandler

webapp 中,addList

重启 tomcat,进入 http://localhost:8080/addList.jsp


@ResponseBody 中文乱码,解决:

springmvc.xml 中,添加代码:

    <mvc:annotation-driven>
        <!--    消息转换器    -->
        <mvc:message-converters register-defaults="true"><!-- 默认注册 -->
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes" value="text/html;charset=UTF-8"></property>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>
重启 tomcat

绑定 Map

1 entity 中,新建实体类 UserMap,加入代码:

package com.southwind.entity;

import lombok.Data;

import java.util.Map;

@Data
public class UserMap {
    private Map<String, User> users;
}

2 DataBindHandler 中,添加代码:

    @RequestMapping("/map")
    @ResponseBody
    public String map(UserMap userMap){
        StringBuffer str = new StringBuffer();
        for(String key:userMap.getUsers().keySet()){
            User user = userMap.getUsers().get(key);
            str.append(user);
        }
        return str.toString();
    }

3 webapp 中,新建 addMap.jsp,加入代码:

    <form action="/data/map" method="post">
        用户1编号:<input type="text" name="users['a'].id" /><br/>
        用户1名称:<input type="text" name="users['a'].name" /><br/>
        用户2编号:<input type="text" name="users['b'].id" /><br/>
        用户2名称:<input type="text" name="users['b'].name" /><br/>
        用户3编号:<input type="text" name="users['c'].id" /><br/>
        用户3名称:<input type="text" name="users['c'].name" /><br/>
        <input type="submit" value="提交"/>
    </form>

4 重启 tomcat,进入 http://localhost:8080/addMap.jsp

绑定 Json

1 webapp 中,新建文件夹 js,把 jquery-3.5.1.min.js 粘贴进 js 中

2 webapp 中,新建 json.jsp,加入代码:

	<script type="text/javascript" src="js/jquery-3.5.1.min.js"></script>
    <script type="text/javascript">
        $(function(){
            alert(123);
        })
    </script>

静态资源加载 会被拦截,解决:
3 WEB-INF/ web.xml 中,加入代码:

  <servlet-mapping>
    <servlet-name>default</servlet-name>
    <url-pattern>*.js</url-pattern>
  </servlet-mapping>

4 rebuild 工程,再重启 tomcat,进入 http://localhost:8080/json.jsp

5 json.jsp 中,注释 +加入代码:

<script type="text/javascript">
        $(function () {
            var user = {
                "id":1,
                "name":"张三"
            };

            $.ajax({
                url:"/data/json",
                data:JSON.stringify(user),
                type:"POST",
                contentType:"application/json;charset=UTF-8",
                dataType:"JSON", //返回数据
                success:function(data){
                    alert(data.id + " --- " + data.name);
                }
            })
        });
    </script>

6 DataBindHandler 中,加入代码:

    @RequestMapping("/json")
    @ResponseBody
    public User json(@RequestBody User user){
        System.out.println(user);
        user.setId(6);
        user.setName("张六");
        return user;
    }

jsp 中 json 数据 无法转成 DataBindHandler 的 java 对象,解决:
7 pom 文件中,添加代码:

    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.72</version>
    </dependency>

依赖 爆红,解决:https://blog.csdn.net/goquesting/article/details/78422964

8 springmvc.xml 中,添加代码:

		<!--      配置 fastjson      -->
            <bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"></bean>

9 rebuild 工程,再重启 tomcat,进入 http://localhost:8080/json.jsp

上一节:https://blog.csdn.net/qq_40893824/article/details/107055793
下一节:https://blog.csdn.net/qq_40893824/article/details/107229346

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1403034144

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值