Spring Converter入门之字符串转化为枚举

本文介绍如何使用 Spring 的 Converter 接口将前端传入的字符串转换为后端所需的枚举类型。通过实例演示了定义转换器类及在 Spring 配置文件中的配置过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

       Converter是Spring3中引入的一项比较特殊的功能,其实就是一个转换器,可以把一种类型转换为另一种类型。尤其是在web项目中比较常见,可以对接口的入参做校验,把前端的入参的类型转换后为后端可以使用的类型。如常常用来做类型转换、字符串去空、日期格式化等。在Spring3之前进行类型转换都是使用PropertyEditor,使用PropertyEditor的setAsText()方法可以实现String转向特定的类型,但是它的最大的一个缺陷就是只支持String转为其他类型。
      Spring中的三种类型转换接口分别为:
  • Converter接口:使用最简单,但是不太灵活;
  • ConverterFactory接口:使用较复杂,稍微灵活一点;
  • GenericConverter接口:使用最复杂,也最灵活;

由于枚举类型在开发中很常见,而前端无法直接传入一个Java中的枚举类型。该篇博客将会使用Converter来把一个前端传入的String转化为枚举,以方便使用。

  • 首先了解一下Converter接口
Spring中Converter接口如下:

package org.springframework.core.convert.converter;

public interface Converter<S, T> {
    T convert(S var1);
}


即可以把S类型转化为T类型,并支持泛型。

  • 首先建立一个简单的对象类Person

其中的一个字段性别GenderEnum使用了枚举。
public class Person {

    private String name;
    private GenderEnum type;

    public Person() {
    }

    public Person(GenderEnum type, String name) {
        this.type = type;
        this.name = name;
    }

    public GenderEnum getType() {
        return type;
    }

    public void setType(GenderEnum type) {
        this.type = type;
    }

    public String getName() {
        return name;
    }

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

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


  • 需要转化的枚举类
两个字段分别为male、female。现在的需求是前端分别传入“male”、“female”,后台就能转换为枚举中的male,female.
public enum GenderEnum {
    male("male"),
    female("female");

    private final String value;

    GenderEnum(String v) {
        this.value = v;
    }

    public String toString() {
        return this.value;
    }

    public static GenderEnum get(int v) {
        String str = String.valueOf(v);
        return get(str);
    }

    public static GenderEnum get(String str) {
        for (GenderEnum e : values()) {
            if (e.toString().equals(str)) {
                return e;
            }
        }
        return null;
    }
}



  • Convert转换类

在这个类中实现了Converter接口,并重写convert方法。
final class StringToGenderEnumConverter implements Converter<String, GenderEnum> {

    @Override
    public GenderEnum convert(String source) {
        String value = source.trim();
        if ("".equals(value)) {
            return null;
        }
        return GenderEnum.get(Integer.parseInt(source));
    }
}



  • spring-mvc.xml配置
在Spring配置文件中,配置conversionService。

<mvc:annotation-driven conversion-service="conversionService"/>
<bean id="conversionService" class="org.springframework.context.support.ConversionServiceFactoryBean"
    <property name="converters"
        <set>
            <bean class="com.chenyufeng.springmvc.common.converter.StringToGenderEnumConverter"/>
        </set>
    </property>

</bean>






宁波整形医院http://www.lyxcl.org/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值