当前位置: 首页 > 知识库问答 >
问题:

Spring MVC类型转换:PropertyEditor还是Converter?

萧宏峻
2023-03-14

我正在寻找在Spring MVC中绑定和转换数据的最简单和最简单的方法。如果可能,不进行任何xml配置。

public class CategoryEditor extends PropertyEditorSupport {

    // Converts a String to a Category (when submitting form)
    @Override
    public void setAsText(String text) {
        Category c = new Category(text);
        this.setValue(c);
    }

    // Converts a Category to a String (when displaying form)
    @Override
    public String getAsText() {
        Category c = (Category) this.getValue();
        return c.getName();
    }

}
...
public class MyController {

    @InitBinder
    public void initBinder(WebDataBinder binder) {
        binder.registerCustomEditor(Category.class, new CategoryEditor());
    }

    ...

}

但是Spring3.x引入了一种新的方法,使用转换器:

在Spring容器中,该系统可用作PropertyEditors的替代方案

所以假设我想使用转换器,因为它是“最新的替代方案”。我必须创建两个转换器:

public class StringToCategory implements Converter<String, Category> {

    @Override
    public Category convert(String source) {
        Category c = new Category(source);
        return c;
    }

}

public class CategoryToString implements Converter<Category, String> {

    @Override
    public String convert(Category source) {
        return source.getName();
    }

}
<bean id="conversionService"
  class="org.springframework.context.support.ConversionServiceFactoryBean">
    <property name="converters">
        <set>
            <bean class="somepackage.StringToCategory"/>
            <bean class="somepackage.CategoryToString"/>
        </set>
    </property>
</bean>
@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    protected void addFormatters(FormatterRegistry registry) {
        registry.addConverter(new StringToCategory());
        registry.addConverter(new CategoryToString());
    }

}

有了这些缺点,为什么还要使用转换器呢?我是不是漏掉了什么?还有其他我不知道的把戏吗?

我很想继续使用propertyeditors...绑定要容易得多,速度也快得多。

共有1个答案

司健柏
2023-03-14

您可以通过将两个转换器实现为静态内部类来解决拥有两个独立转换器类的需要。

public class FooConverter {
    public static class BarToBaz implements Converter<Bar, Baz> {
        @Override public Baz convert(Bar bar) { ... }
    }
    public static class BazToBar implements Converter<Baz, Bar> {
        @Override public Bar convert(Baz baz) { ... }
    }
}

您仍然需要分别注册这两个文件,但如果您进行任何更改,这至少减少了您需要修改的文件数量。

 类似资料:
  • 问题内容: 我正在寻找在Spring MVC中绑定和转换数据的最简单方法。如果可能,不进行任何xml配置。 到目前为止,我一直在像这样使用PropertyEditors: 和 很简单:两个转换都在同一个类中定义,并且绑定很简单。如果我想在所有控制器之间进行常规绑定,则仍可以在xml config中添加3行。 但是Spring 3.x引入了一种使用Converters的新方法: 在Spring容器中

  • 关于ts as number 依旧是string 的问题 我这里代码已经在每一个步骤已经声明了是 number 但是依旧打印出来时是string 但是如果我使用 parseInt(sid) 又会提示我number 类型的参数不能赋值于 string 所以 类型转换是怎么转换的呢 ts 正确的类型转换

  • 本文向大家介绍springmvc json类型转换错误解决方案,包括了springmvc json类型转换错误解决方案的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了springmvc json类型转换错误解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 在用springmvc做json数据时,返回时,提示类型转换错误 如下,

  • 本文向大家介绍SpringMVC自定义类型转换器实现解析,包括了SpringMVC自定义类型转换器实现解析的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了SpringMVC自定义类型转换器实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 页面录入的字符串:2019/12/05可以映射到实体的日期属性上,但是如果是录入2019-1

  • 本文向大家介绍详解SpringMVC的类型转换及验证方法,包括了详解SpringMVC的类型转换及验证方法的使用技巧和注意事项,需要的朋友参考一下 Spring mvc 数据绑定流程: SpringMvc将ServletRequest对象及目标方法的形参实例传给WebDataBinderFactory实例,以创建DataBinder实例对象。DataBinder调用装配在SpringMvc上下文中

  • 问题内容: 这个问题已经在这里有了答案 : T-SQL转换与转换 (7个答案) 7年前关闭。 选择什么:或用于日期时间(Microsoft SQL Server)? 我看过MSDN规范。乍一看,似乎没有什么区别,除了语法: CAST的语法: CONVERT的语法: 而且 CAST 是ANSI标准,这使其在不同的数据库平台上都更具可移植性。 问题答案: 有一个可选参数,我建议用代替。它有助于避免混乱