Spring MVC處理參數(shù)中的枚舉類型通用實現(xiàn)方法
前言
在開發(fā)的過程中,會涉及到大量的枚舉類型數(shù)據(jù),我們都知道,Springmvc本身能自動轉(zhuǎn)換很多的數(shù)據(jù)類型,也支持你自定義轉(zhuǎn)換類型,非常靈活。
本文主要介紹的是關(guān)于Spring MVC處理參數(shù)的枚舉類型通用實現(xiàn)的相關(guān)內(nèi)容,下面話不多說了,來一起看看詳細的介紹吧
業(yè)務(wù)場景:
前端提交了枚舉的一個屬性value,想由spring來完成參數(shù)類型自動轉(zhuǎn)換成對應(yīng)的枚舉。
比方有一個枚舉
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum RegisterStatus implements SpringConverterableEnum {
WAITING(0, "待審核"),
PASSED(1, "已通過"),
REJECTED(2, "已拒絕");
private int value;
private String desc;
}
實現(xiàn)統(tǒng)一自定義接口
需要自動轉(zhuǎn)換的枚舉實現(xiàn)統(tǒng)一自定義接口,可隨意定義,此處直接用get方法
public interface SpringConverterableEnum {
int getValue();
}
實現(xiàn)ConverterFactory
實現(xiàn)某一個class的類型自動轉(zhuǎn)換,實現(xiàn)converter接口。要實現(xiàn)能支持多種枚舉的通用轉(zhuǎn)換,應(yīng)當(dāng)實現(xiàn)ConverterFactory接口。
實現(xiàn)中利用class提供的getEnumConstants來獲得任意枚舉類型的values
public class ValuedEnumConverter implements ConverterFactory<String, SpringConverterableEnum> {
@Override
public <T extends SpringConverterableEnum> Converter<String, T> getConverter(Class<T> targetType) {
return new IntegerToEnum(targetType);
}
private class IntegerToEnum<T extends SpringConverterableEnum> implements Converter<String, T> {
private final T[] values;
public IntegerToEnum(Class<T> targetType) {
values = targetType.getEnumConstants();
}
@Override
public T convert(String source) {
for (T t : values) {
if (t.getValue() == Integer.valueOf(source)) {
return t;
}
}
return null;
}
}
}
注冊到Spring中
<mvc:annotation-driven conversion-service="conversionService"/> <bean class="org.springframework.context.support.ConversionServiceFactoryBean" id="conversionService"> <property name="converters"> <list> <bean class="com... ValuedEnumConverter"/> </list> </property> </bean>
之后,form或者ajax提交registerStatus=1時,則會自動轉(zhuǎn)換為枚舉對象。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Java Base64算法實際應(yīng)用之郵件發(fā)送實例分析
這篇文章主要介紹了Java Base64算法實際應(yīng)用之郵件發(fā)送,結(jié)合實例形式分析了java字符編碼與郵件發(fā)送相關(guān)操作技巧,需要的朋友可以參考下2019-09-09
Java項目Guava包?HashMultimap使用及注意事項
guava基本上可以說是java開發(fā)項目中,大概率會引入的包,今天介紹的主角是一個特殊的容器HashMultmap,可以簡單的將它的數(shù)據(jù)結(jié)構(gòu)理解為Map<K,?Set<V>>,今天主要介紹下基礎(chǔ)的知識點?HashMultmap級使用,感興趣的朋友一起看看吧2022-05-05
解決Spring Cloud中Feign/Ribbon第一次請求失敗的方法
這篇文章主要給大家介紹了關(guān)于解決Spring Cloud中Feign/Ribbon第一次請求失敗的方法,文中給出了三種解決的方法,大家可以根據(jù)需要選擇對應(yīng)的方法,需要的朋友們下面來一起看看吧。2017-02-02
Java利用Phantomjs實現(xiàn)生成圖片的功能
這篇文章主要介紹了Java利用Phantomjs實現(xiàn)生成圖片的功能,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-08-08
springboot+EHcache 實現(xiàn)文章瀏覽量的緩存和超時更新
這篇文章主要介紹了springboot+EHcache 實現(xiàn)文章瀏覽量的緩存和超時更新,問題描述和解決思路給大家介紹的非常詳細,需要的朋友可以參考下2017-04-04
java List循環(huán)與Map循環(huán)的總結(jié)
這篇文章主要介紹了java List循環(huán)與Map循環(huán)的總結(jié)的相關(guān)資料,并附代碼實例,幫助大家學(xué)習(xí)理解,需要的朋友可以參考下2016-11-11

