@InitBinder 注解
介绍
@InitBinder注解可以作用在被@Controller注解的类的方法上,表示为当前控制器注册一个属性编辑器,用于对WebDataBinder进行初始化,且只对当前的Controller有效。@InitBinder标注的方法会被多次执行的,也就是说来一次请求就会执行一次@InitBinder注解方法的内容。
- @InitBinder注解是在其所标注的方法执行之前被解析和执行;
- @InitBinder的value属性,控制的是模型Model里的KEY,而不是方法名;
- @InitBinder标注的方法也不能有返回值;
- @InitBinder对@RequestBody这种基于消息转换器的请求参数是失效的。
@InitBinder 是 Spring MVC 中的一个注解,用于初始化数据绑定器。它通常用来为特定的请求设置自定义的编辑器,以便将请求参数转换为特定的目标对象类型。通过这种方式,可以控制如何从请求参数中解析数据并将其绑定到 Java 对象中。
作用
用于将前端传递过来的数据进行类型转换或者叫属性编辑,如:将前端传递过来的字符串格式的日期数据,转化为DATE类型。
范围
@InitBinder是属于Controller级别的属性编辑器,并非全局级别(针对所有Controller)的属性编辑器,也就是一个@InitBinder只对当前所在的Controller有效,对其他Controller无效的,如果项目中有多个Controller中都要进属性编辑怎么办呢?一般我们将@InitBinder标注的方法定义在基础的控制器上,所有具体的Controller继承这个基础的Controller即可。
示例
以下是一个使用 @InitBinder 注解的示例:
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.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;import java.text.SimpleDateFormat;
import java.util.Date;@Controller
public class MyController {@InitBinderpublic void initBinder(WebDataBinder binder) {SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");dateFormat.setLenient(false);binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false));}@PostMapping("/submit")public String submitForm(@RequestParam("date") Date date) {// 使用绑定后的日期对象处理逻辑System.out.println("Received date: " + date);return "result";}
}
在这个示例中:
@InitBinder注解的方法initBinder接收一个WebDataBinder对象。- 在
initBinder方法中,我们创建了一个自定义的日期编辑器CustomDateEditor,并将其注册到WebDataBinder。这样,在处理请求参数时,Spring MVC 会使用这个自定义的编辑器将请求中的字符串日期转换为Date对象。 submitForm方法处理POST请求,并接收一个@RequestParam注解的Date对象。由于我们在initBinder方法中注册了自定义编辑器,Spring MVC 会自动将请求参数中的日期字符串转换为Date对象并传递给submitForm方法。
通过 @InitBinder,我们可以轻松地为特定的请求参数设置自定义的转换逻辑,确保数据绑定过程中的灵活性和可扩展性。
[SpringBoot - @InitBinder注解详解-CSDN博客](