SpringMVC类型转换器

前言:本文旨在记录类型转换器的应用步骤,在实际开发中可能不具有使用意义。

一、案例分析

1、前端使用Ajax发送异步请求,请求方式POST,请求参数
student=小明_男_2019.5.18
2、实现类型转换器,将student字符串转换为student对象。
3、将转换的对象以json数据格式返回给前端,测试转换是否成功。

二、代码实现

student.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学生信息</title>
</head>
<body>
    <label for="name">姓名:</label> <input id="name" type="text" ><br>
    <label for="sex">性别:</label> <input id="sex" type="text" > <br>
    <label for="birthday">生日</label> <input id="birthday" type="text" >
    <button id="submit">提交</button>
    <div id="submitResult"></div>
    
    <script>
        document.getElementById("submit").onclick = function () {
        
           <!-- 组织参数为: student=小明_男_2019.5.18 格式-->
            var params = "student=" + document.getElementById("name").value + "_" +
                    document.getElementById("sex").value + "_" +
                    document.getElementById("birthday").value;
            <!-- 发送Ajax请求 -->
            var req = new XMLHttpRequest();
            req.open("POST", "/student", true);
            req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
            req.send(params);

            req.onreadystatechange = function () {
                if (req.readyState === 4) {
                    if (req.status === 200) {
                        <!-- 显示请求处理结果 -->
                        document.getElementById("submitResult").innerText = req.responseText;
                    } else {
                        document.getElementById("submitResult").innerText = req.statusText;
                    }
                }
            }
        }
    </script>
</body>
</html>

Student.java

public class Student {
    private String name;
    private String sex;
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date birthday;
    // 忽略 构造器和getter、setter方法;
}

Controller方法,为支持@ResponseBody需要添加jackson(或Gson、fastjson)依赖

 @RequestMapping(value="/student", method = RequestMethod.POST)
    @ResponseBody
    public Student test(@RequestParam("student") Student student) {
        return student;
    }

以上代码主要目的是方便对类型转换器设计的理解,以下解释类型转化器使用的具体步骤。

使用类型转换器分为两步,

第一步:实现Converter<S, T>接口
org.springframework.core.convert.converter.Converter<S, T>,S表示源类型,T表示目标类型 在本案例中S:String ,T:Student
public class HttpParamsConverter implements Converter<String, Student> {
    @Override
    public Student convert(String params) {
    
        Student student = new Student();
        
        if (params != null && params.trim() != "") {
            String[] val = params.split("_");
            if (val != null && val.length == 3) {
              student.setName(val[0]);
              student.setSex(val[1]);
              
              String[] date = val[2].split("\\.");  //  点号需要转义
              int y = Integer.parseInt(date[0]);
              int m = Integer.parseInt(date[1]);
              int d = Integer.parseInt(date[2]);
              student.setBirthday(new Date(y - 1900, m - 1, d));   
            }
        }
        return student;
    }
}

第一步:配置mvc:annotation-driven的属性conversionService
 <bean id="httpParamsConverter" class="com.gzn.demo.convert.HttpParamsConverter"/>

<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <ref bean="httpParamsConverter"/>
            </set>
        </property>
    </bean>


 <mvc:annotation-driven conversion-service="conversionService"/>
     

测试

在这里插入图片描述
请求参数:
在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

明月几时有666

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

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

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

打赏作者

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

抵扣说明:

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

余额充值