當前位置:
首頁 > 知識 > Spring Converter 入門之字元串轉化為枚舉

Spring Converter 入門之字元串轉化為枚舉

(點擊

上方公眾號

,可快速關注)




來源:乞力馬扎羅的雪雪 ,


blog.csdn.net/chenyufeng1991/article/details/78242369




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>




Controller




在Controller介面中,對於枚舉欄位,前端可以直接傳入String類型的「male」、「female」,Converter可以自動進行轉換。





@Api(value = "converter", description = "自動轉換", produces = MediaType.APPLICATION_JSON_VALUE)


@Controller


@RequestMapping("/converter")


public class ConverterController {


 


    @Autowired


    private ConverterService converterService;


 


    @RequestMapping(value = "/savePerson", method = RequestMethod.GET)


    @ResponseBody


    public String savePerson(


            @ApiParam(value = "type") @RequestParam GenderEnum type,


            @ApiParam(value = "ID") @RequestParam String id) {


 


        Person person = new Person(type, id);


        return converterService.savePerson(person);


    }


}




以上案例上傳至:https://github.com/chenyufeng1991/StartSpringMVC_Modules中。




看完本文有收穫?請轉發分享給更多人


關注「ImportNew」,提升Java技能


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 ImportNew 的精彩文章:

通向架構師的道路 ( 第十七天 ) IBM Websphere 集群探秘 – WASND
不同的垃圾回收器的比較

TAG:ImportNew |