gpt4 book ai didi

java - Spring的DataBinder是如何用来转换普通参数值的?

转载 作者:行者123 更新时间:2023-11-30 03:13:44 26 4
gpt4 key购买 nike

我一直在研究 Spring DataBinder codedocs接听时this question我注意到 DataBinder constructor docs提到:

target - the target object to bind onto (or null if the binder is just used to convert a plain parameter value)

我一直在寻找,但没有找到这样的用法,这真的让我很好奇。将不胜感激与以下相关的任何见解:

  • 如何将这样的数据绑定(bind)器与空目标一起使用来转换普通参数值?
  • 或者在这种情况下转换普通参数值实际上意味着什么?
  • 它也适用于 Spring MVC 吗? (因为我注意到 WebDataBinder 的构造函数文档中也提到了它)。

最佳答案

我已经在 Spring 框架源代码中进行了一些挖掘,搜索了您所描述的 null 参数的用法。由于我也不知道这种用法,因此查看测试用例以更好地理解事物是我的方法。

DataBinder 的测试类是(毫不奇怪)DataBinderTests

我将在此处粘贴一个使用示例,以及我在其中找到代码的 github 链接,以供引用:

对于你的第一个问题,答案似乎是如果你使用带有 null 构造函数参数的 DataBinder ,这意味着你只想使用转换工具,而不需要数据绑定(bind)机制(因为我们没有传递一个对象来绑定(bind)值)。这个很好解释的测试用例展示了这种类型的用法,创建一个带有 nullDataBinder,将 DefaultFormattingConversionService 设置为 dataBinder然后注册一个自定义编辑器。如果您在转换 bean 后想要不同的字符串表示形式,则可以使用 addConverter 方法添加自定义转换器。

    @Test
public void testConversionWithInappropriateStringEditor() {
DataBinder dataBinder = new DataBinder(null);
DefaultFormattingConversionService conversionService = new DefaultFormattingConversionService();
dataBinder.setConversionService(conversionService);
dataBinder.registerCustomEditor(String.class, new StringTrimmerEditor(true));

NameBean bean = new NameBean("Fred");
assertEquals("ConversionService should have invoked toString()", "Fred", dataBinder.convertIfNecessary(bean, String.class));
conversionService.addConverter(new NameBeanConverter());
assertEquals("Type converter should have been used", "[Fred]", dataBinder.convertIfNecessary(bean, String.class));
}

作为引用,这里是 NameBeanConverter 的代码(也来自测试类)

public static class NameBeanConverter implements Converter<NameBean, String> {
@Override
public String convert(NameBean source) {
return "[" + source.getName() + "]";
}
}

来源:https://github.com/spring-projects/spring-framework/blob/d5ee787e1e6653257720afe31ee3f8819cd4605c/spring-context/src/test/java/org/springframework/validation/DataBinderTests.java#L598-L609

我认为上述解释是对前两个问题的回答:

How would such a data binder be used with a null target to convert a plain parameter value?
Or what does it actually mean to convert a plain parameter value in this context?

对于你的第三个问题,不幸的是,我没有找到任何像上面这样的可用测试用例,但是浏览WebDataBinder的代码让我想到与相比没有“附加值” >DataBinder 的构造函数参数为空,因此您也可以通过 WebDataBinder 使用转换工具。

您可能知道可以将 Web 请求字段绑定(bind)到支持 bean,添加转换(例如,将特定格式的日期转换为支持 bean 上的实际 Date 字段对象)等,但是我不想更详细地描述这一点,因为我猜这不是您提出问题的观点。

最后,我发现这篇文章对于如何使用 WebDataBinder 非常有用:http://www.intertech.com/Blog/spring-frameworks-webdatabinder/

关于java - Spring的DataBinder是如何用来转换普通参数值的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33103045/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com