Spring MVC處理參數(shù)中的枚舉類型通用實(shí)現(xiàn)方法
前言
在開(kāi)發(fā)的過(guò)程中,會(huì)涉及到大量的枚舉類型數(shù)據(jù),我們都知道,Springmvc本身能自動(dòng)轉(zhuǎn)換很多的數(shù)據(jù)類型,也支持你自定義轉(zhuǎn)換類型,非常靈活。
本文主要介紹的是關(guān)于Spring MVC處理參數(shù)的枚舉類型通用實(shí)現(xiàn)的相關(guān)內(nèi)容,下面話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧
業(yè)務(wù)場(chǎng)景:
前端提交了枚舉的一個(gè)屬性value,想由spring來(lái)完成參數(shù)類型自動(dòng)轉(zhuǎn)換成對(duì)應(yīng)的枚舉。
比方有一個(gè)枚舉
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum RegisterStatus implements SpringConverterableEnum {
WAITING(0, "待審核"),
PASSED(1, "已通過(guò)"),
REJECTED(2, "已拒絕");
private int value;
private String desc;
}
實(shí)現(xiàn)統(tǒng)一自定義接口
需要自動(dòng)轉(zhuǎn)換的枚舉實(shí)現(xiàn)統(tǒng)一自定義接口,可隨意定義,此處直接用get方法
public interface SpringConverterableEnum {
int getValue();
}
實(shí)現(xiàn)ConverterFactory
實(shí)現(xiàn)某一個(gè)class的類型自動(dòng)轉(zhuǎn)換,實(shí)現(xiàn)converter接口。要實(shí)現(xiàn)能支持多種枚舉的通用轉(zhuǎn)換,應(yīng)當(dāng)實(shí)現(xiàn)ConverterFactory接口。
實(shí)現(xiàn)中利用class提供的getEnumConstants來(lái)獲得任意枚舉類型的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;
}
}
}
注冊(cè)到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時(shí),則會(huì)自動(dòng)轉(zhuǎn)換為枚舉對(duì)象。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
springmvc接收json串,轉(zhuǎn)換為實(shí)體類List方法
今天小編就為大家分享一篇springmvc接收json串,轉(zhuǎn)換為實(shí)體類List方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-08-08
詳解spring cloud ouath2中的資源服務(wù)器
這篇文章主要介紹了spring cloud ouath2中的資源服務(wù)器的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
springboot中server.ssl.key-store配置路徑的問(wèn)題小結(jié)
這篇文章主要介紹了springboot中server.ssl.key-store配置路徑的問(wèn)題,文中還記錄了Spring Boot SSL(https)實(shí)例,介紹在web程序中使用自簽名的SSL(HTTPS)證書(shū)及創(chuàng)建SSL認(rèn)證,感興趣的朋友跟隨小編一起看看吧2024-02-02
Spring Cloud體系實(shí)現(xiàn)標(biāo)簽路由的方法示例
這篇文章主要介紹了Spring Cloud體系實(shí)現(xiàn)標(biāo)簽路由的方法示例,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05
Java中綴表達(dá)式轉(zhuǎn)后綴表達(dá)式流程詳解
中綴表達(dá)式是一個(gè)通用的算術(shù)或邏輯公式表示方法。,中綴表達(dá)式不容易被計(jì)算機(jī)解析,但仍被許多程序語(yǔ)言使用,因?yàn)樗先藗兊钠毡橛梅?。本文介紹了實(shí)現(xiàn)中綴表達(dá)式的方法,需要的可以參考一下2022-09-09
springBoot使用openfeign來(lái)遠(yuǎn)程調(diào)用的實(shí)現(xiàn)
這篇文章主要介紹了springBoot使用openfeign來(lái)遠(yuǎn)程調(diào)用的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03

