亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot項目中枚舉類型字段與前端和數(shù)據(jù)庫的交互方法

 更新時間:2024年07月12日 11:05:24   作者:唐糕  
最近做的這個項目中,用到了大量的枚舉類,下面這篇文章主要給大家介紹了關(guān)于SpringBoot項目中枚舉類型字段與前端和數(shù)據(jù)庫的交互方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下

在數(shù)據(jù)庫中,我們通常需要定義一些描述狀態(tài)的字段來展示業(yè)務(wù)的進展情況或?qū)ο蟮臓顟B(tài),例如user表中定義一個int類型的字段status,0表示賬戶禁用,1表示賬戶正常;transaction交易表中定義一個交易狀態(tài)字段dealStatus,0表示交易取消,1表示交易發(fā)起,2表示交易成功等等。

為了在java代碼中更好地管理這些狀態(tài)字段,我們通常會在項目中定義枚舉類來描述這個字段所有的狀態(tài)值以及對應(yīng)的意思。

public enum BaseStatus {

    ENABLE(1, "正常"),
    DISABLE(0, "禁用");

    private Integer code;
    private String name;

    BaseStatus(Integer code, String name) {
        this.code = code;
        this.name = name;
    }

    public Integer getCode() {
        return this.code;
    }

    public String getName() {
        return this.name;
    }
}

在前后端的數(shù)據(jù)交互中,經(jīng)常會涉及到狀態(tài)字段的轉(zhuǎn)換,例如前端需要查詢正常使用的用戶信息,查詢條件為status="1",然后后端查詢到需要的數(shù)據(jù)后,將用戶集合中的狀態(tài)字段的數(shù)字轉(zhuǎn)換為漢字返回給前端。

為此,我們需要在對應(yīng)的需求處調(diào)用getCode()或getName()方法,這會導(dǎo)致我們的代碼冗余度高并且不利于維護。所以我們可以在項目中定義一個全局的枚舉消息轉(zhuǎn)換器,controller接口可以使用對應(yīng)的枚舉類型去接收參數(shù),并返回前端想要的中文意思。

項目實踐:

1、定義一個接口BaseEnum,提供getCode()和getName()方法。

public interface BaseEnum {
    int getCode();
    String getName();
}

2、定義具體的枚舉類UserStatus,實現(xiàn)BaseEnum接口。其他需要的枚舉類均以這種方式創(chuàng)建,定義Integer類型的屬性code和String類型的屬性name。

@EnumValue注解是mybatisplus框架提供的,標(biāo)注在code上表示在java服務(wù)與數(shù)據(jù)庫交互時,status字段的值與UserStatus枚舉類的code屬性進行映射。

@JsonValue注解標(biāo)注在枚舉類的name字段上,將對象序列化成json字符串時,status字段會取枚舉類name字段的值封裝到j(luò)son串中。

public enum UserStatus implements BaseEnum {

    ENABLE(1, "正常"),
    DISABLE(0, "禁用");

    @EnumValue
    private Integer code;

    @JsonValue
    private String name;

    UserStatus(Integer code, String name) {
        this.code = code;
        this.name = name;
    }

    @Override
    public int getCode() {
        return this.code;
    }

    @Override
    public String getName() {
        return this.name;
    }
}

3、定義一個枚舉消息轉(zhuǎn)換類CodeEnumConverter,實現(xiàn)接口ConverterFactory<String, BaseEnum>,重寫getConverter()方法,并將自定義轉(zhuǎn)換類的bean交由spring容器管理。

/**
 * <String, BaseEnum>
 * String表示前端傳遞的參數(shù)是String類型的
 * BaseEnum表示我需要將String類型的參數(shù)轉(zhuǎn)換成BaseEnum類型的參數(shù)
 */
@Component
public class CodeEnumConverter implements ConverterFactory<String, BaseEnum> {

    @Override
    public <T extends BaseEnum> Converter<String, T> getConverter(Class<T> targetType) {
        return new Converter<String, T>() {
            @Override
            public T convert(String source) {
                /*
                    Class.getEnumConstants()方法是Java反射API中的一個方法,
                    用于獲取表示枚舉類型的 Class 對象中所有枚舉常量的數(shù)組
                */
                for (T enumConstant : targetType.getEnumConstants()) {
                    if (enumConstant.getCode() == Integer.valueOf(source)) {
                        return enumConstant;
                    }
                }
                throw new IllegalArgumentException("非法的枚舉值:" + source);
            }
        };
    }
}

4、將枚舉消息轉(zhuǎn)換類CodeEnumConverter注冊到springmvc中。

@Configuration
public class WebMvcConfiguration implements WebMvcConfigurer {

    @Autowired
    private CodeEnumConverter enumConverter;

    @Override
    public void addFormatters(FormatterRegistry registry) {
        registry.addConverterFactory(this.enumConverter);
    }
}

5、controller接口可以使用枚舉類型的字段去接收前端的請求參數(shù)。

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private IUserService userService;

    @GetMapping("/getUser")
    public List<User> getUser(@RequestParam(value = "status", required = false) UserStatus status) {
        List<User> list = userService.lambdaQuery()
            .eq(!ObjectUtils.isEmpty(status), User::getStatus, status).list();
        return list;
    }
}

6、發(fā)送請求,查詢狀態(tài)為1的用戶,springmvc接收到請求后會對參數(shù)進行轉(zhuǎn)換,然后調(diào)用后端方法,并返回前端

7、在響應(yīng)結(jié)果中,可以看到status的值為"正常",這種請求時傳遞數(shù)值,響應(yīng)時返回漢字的需求,在很多地方都會用到。同時,可以看到響應(yīng)中的createTime和updateTime字段返回的時間信息不符合我們的閱讀習(xí)慣,修改json字符串中時間字段的格式,可以做如下配置:

7.1、在配置文件中添加配置:

spring.jackson.time-zone=GMT+8

7.2、在響應(yīng)的實體類時間字段上標(biāo)注@JsonFormat注解,并指定時間格式

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime updateTime;

7.3、完成以上兩個步驟后,重新訪問,時間格式就會變成我們所需要的樣子       

總結(jié)

到此這篇關(guān)于SpringBoot項目中枚舉類型字段與前端和數(shù)據(jù)庫的交互方法的文章就介紹到這了,更多相關(guān)SpringBoot枚舉字段與前端數(shù)據(jù)庫交互內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • springboot中的starter使用解析

    springboot中的starter使用解析

    這篇文章主要介紹了springboot中的starter使用解析,引入了starter依賴之后,基礎(chǔ)組件就可以像在spring的bean一樣在項目中使用,那其實只要找到在哪里加載了這些bean就明白了,需要的朋友可以參考下
    2023-10-10
  • Java+OpenCV實現(xiàn)圖片中的人臉識別

    Java+OpenCV實現(xiàn)圖片中的人臉識別

    這篇文章主要介紹了如何利用java?opencv實現(xiàn)人臉識別功能,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-03-03
  • 一文詳解gRPC快速整合SpringCloud

    一文詳解gRPC快速整合SpringCloud

    這篇文章主要為大家介紹gRPC快速整合SpringCloud的實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • springboot+dubbo實現(xiàn)時間輪算法

    springboot+dubbo實現(xiàn)時間輪算法

    時間輪是一種高效利用線程資源進行批量化調(diào)度的算法,本文主要介紹了springboot+dubbo實現(xiàn)時間輪算法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2025-04-04
  • JDK動態(tài)代理的深入理解與實際應(yīng)用

    JDK動態(tài)代理的深入理解與實際應(yīng)用

    這篇文章主要介紹了JDK動態(tài)代理的深入理解與實際應(yīng)用,在Java的世界里,JDK的動態(tài)代理是一項非常強大且實用的技術(shù),它為我們在運行時動態(tài)地創(chuàng)建代理類提供了可能,從而實現(xiàn)對目標(biāo)對象方法調(diào)用的靈活攔截和增強,需要的朋友可以參考下
    2025-02-02
  • Java裝飾者模式的示例詳解

    Java裝飾者模式的示例詳解

    裝飾者模式:在不改變原有對象的基礎(chǔ)之上,動態(tài)的將功能附加到對象上,提供了繼承更有彈性的替代方案,也體現(xiàn)了開閉原則。本文將通過示例詳細(xì)講解一下裝飾者模式,需要的可以參考一下
    2022-02-02
  • FP-Growth算法的Java實現(xiàn)+具體實現(xiàn)思路+代碼

    FP-Growth算法的Java實現(xiàn)+具體實現(xiàn)思路+代碼

    FP-Growth算法比Apriori算法快很多(但是卻比不上時間,how time slipped away)。在網(wǎng)上搜索后發(fā)現(xiàn)Java實現(xiàn)的FP-Growth算法很少,且大多數(shù)不太能理解):太菜。所以就自己實現(xiàn)了一下。這篇文章重點介紹一下我的Java實現(xiàn)
    2021-06-06
  • java項目導(dǎo)出為.exe執(zhí)行文件的方法步驟

    java項目導(dǎo)出為.exe執(zhí)行文件的方法步驟

    最近做了個項目,想要轉(zhuǎn)換成可執(zhí)行文件,那么java項目如何導(dǎo)出為.exe執(zhí)行文件,本文就介紹一下,主要使用jar2exe軟件,感興趣的可以了解一下
    2021-05-05
  • SpringBoot this調(diào)用@Bean效果詳解

    SpringBoot this調(diào)用@Bean效果詳解

    這篇文章主要介紹了在一個@Bean方法內(nèi),this調(diào)用同一個類的@Bean方法會有什么效果,我們可以通過bean的名稱、bean的類型或者bean的名稱+類型來獲取容器中的bean
    2023-02-02
  • Java判斷用戶名和密碼是否符合要求過程詳解

    Java判斷用戶名和密碼是否符合要求過程詳解

    這篇文章主要介紹了Java判斷用戶名和密碼過程詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02

最新評論