zoukankan      html  css  js  c++  java
  • SpringMVC:自定义Converter

    接着前一篇博客:SpringMVC:自定义参数绑定原理

    测试

    @Data
    public class Person {
        private String userName;
        private Integer age;
        private Date birth;
        private Pet pet;
    }
    @Data
    public class Pet {
        private String name;
        private String age;
    }
    

    index.html

    这里,有一个属性pet,value以逗号分割,前面是name,后面是age

    <form action="save" method="post">
        姓名: <input name="userName" value="admin"/> <br/>
        年龄: <input name="age" value="12"/> <br/>
        生日: <input name="birth" value="2021/01/01"/> <br/>
        宠物姓名:<input name="pet" value="cat,18"/><br/>
        <input type="submit" value="保存">
    </form>
    

    controller:

    @PostMapping("save")
    @ResponseBody
    public Person save(Person person){
        return person;
    }
    

    先进行测试,直接报错了

    image-20210407092115412

    自定义Converter

    在springboot2中,我们对springmvc的组件做一些定制化工作的话,一般需要实现WebMvcConfigurer接口,仔细找一找,不难发现注册自定义canverter的方法:

    	/**
    	 * Add {@link Converter Converters} and {@link Formatter Formatters} in addition to the ones
    	 * registered by default.
    	 */
    	default void addFormatters(FormatterRegistry registry) {
    	}
    

    接下来,我们就可以定制Converter了

    @Configuration
    public class WebConfig implements WebMvcConfigurer {
        @Override
        public void addFormatters(FormatterRegistry registry) {
            registry.addConverter(new Converter<String, Pet>(){
                @Override
                public Pet convert(String source) {
                    if(StringUtils.isEmpty(source)) return null;
                    String[] split = source.split(",");
                    Pet pet = new Pet();
                    pet.setName(split[0]);
                    pet.setAge(split[1]);
                    return pet;
                }
            });
        }
    }
    

    测试:

    image-20210407094152584

    addFormatters源码

    image-20210407094733359

  • 相关阅读:
    .net 面试题之 输出 空 三角型
    js 里 用XML httpRequest 调用 Web Service
    C# 设计模式之 单例模式
    C#TreeView 实现无线级别分类
    asp.net Session的原理
    .Net 面试题之 查询两个时间差
    暑 假 队 测 Round #2
    两个排序算法的扩展应用
    暑 假 队 测 Round #1
    二维单调队列或st表
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14626400.html
Copyright © 2011-2022 走看看