当前位置: 首页 > article >正文

Spring学习笔记_46——@InitBinder

Spring学习笔记_43——@ExceptionHandler
Spring学习笔记_44——@ModelAttribute
Spring学习笔记_45——@ControllerAdvice

@InitBinder

1. 介绍

@InitBinder 是 Spring MVC 框架中的一个注解,用于在控制器(Controller)中初始化 WebDataBinder 对象。

WebDataBinder 是 Spring MVC 用来绑定请求参数到 JavaBean 对象(即模型对象)的工具,同时也支持数据校验和格式化等功能。通过 @InitBinder 注解的方法,开发者可以在请求处理之前对 WebDataBinder 进行自定义配置,比如添加自定义的编辑器(PropertyEditor)或转换器(Converter),或者注册自定义的验证器(Validator)。

2. 场景

  • 数据格式化:当请求参数需要特定的格式化时,比如将字符串转换为日期对象。
  • 数据校验:在绑定请求参数到模型对象之前,对参数进行校验。
  • 自定义属性编辑器:为特定的属性类型提供自定义的编辑器。
  • 数据返回:将服务返回的对象数据格式化成JSON等字符串数据。
  • 处理文件上传:虽然这不是@InitBinder的主要用途,但是可以通过配置来支持文件上传。

3. 源码

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Reflective
public @interface InitBinder {
    
    // String数组类型的属性,用于指定给哪些参数进行绑定
    String[] value() default {}}

4. Demo

import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;

import java.text.SimpleDateFormat;
import java.util.Date;

@Controller
public class MyController {

    // 使用 @InitBinder 注解的方法
    @InitBinder
    public void initBinder(WebDataBinder binder) {
        // 注册自定义的日期格式化器
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        dateFormat.setLenient(false);
        binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));
    }

    // 处理表单提交的请求
    @RequestMapping(value = "/submitForm", method = RequestMethod.POST)
    public String submitForm(@ModelAttribute("myForm") MyFormObject formObject) {
        // 处理表单对象
        System.out.println("Form submitted: " + formObject);
        return "resultPage";
    }

    // MyFormObject 是一个简单的 JavaBean,包含日期属性等
    public static class MyFormObject {
        private String name;
        private Date birthDate;

        // getters and setters
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public Date getBirthDate() {
            return birthDate;
        }

        public void setBirthDate(Date birthDate) {
            this.birthDate = birthDate;
        }

        @Override
        public String toString() {
            return "MyFormObject{" +
                    "name='" + name + '\'' +
                    ", birthDate=" + birthDate +
                    '}';
        }
    }
}

5. 注意事项

  • 方法签名@InitBinder 标记的方法不能有返回值,即返回类型必须为void,并且接收一个 WebDataBinder 类型的参数。
  • 作用范围@InitBinder 注解的方法只对当前控制器有效。如果需要全局配置,可以使用 WebBindingInitializer
  • 请求处理顺序@InitBinder 注解的方法会在每个请求处理之前被调用,确保请求参数在绑定到模型对象之前已经过必要的处理和校验。

http://www.kler.cn/a/407345.html

相关文章:

  • MD5算法的学习
  • 什么是 C++ 中的模板特化和偏特化?如何进行模板特化和偏特化?
  • 【ubuntu24.04.1最简洁安装方案】
  • 运维团队3D可视化智能机房管理方案
  • 微知-ib_write_bw的各种参数汇总(-d -q -s -R --run_infinitely)
  • 使用Python 在Excel中创建和取消数据分组 - 详解
  • 使用同一个链接,如何实现PC打开是web应用,手机打开是一个H5应用
  • Qwen大模型Lora微调-Windows
  • 跟《经济学人》学英文:2024年11月23日这期 Why British MPs should vote for assisted dying
  • 【SpringMVC - 1】基本介绍+快速入门+图文解析SpringMVC执行流程
  • 基本功能实现
  • Linux线程_线程互斥_线程同步
  • QT文件基本操作
  • BERT的中文问答系统35
  • 猎板科技:PCB 特殊定制领域的卓越引领者
  • 汽车软件开发中的ASPICE合规挑战与Jama Connect解决方案
  • 解决整合Django与Jinja2兼容性的问题
  • django+boostrap实现注册
  • MD5算法的学习
  • 08 —— Webpack打包图片
  • 谷粒商城-消息队列Rabbitmq
  • 从熟练Python到入门学习C++(record 6)
  • AMD64(Advanced Micro Devices) 超微半导体 (x86-64)
  • leecode45.跳跃游戏||
  • rembg AI扣图
  • php:使用Ratchet类实现分布式websocket服务