最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談讓@Value更方便的Spring自定義轉(zhuǎn)換類

 更新時(shí)間:2021年06月22日 15:39:29   作者:南瓜慢說  
Spring為大家內(nèi)置了不少開箱即用的轉(zhuǎn)換類,如字符串轉(zhuǎn)數(shù)字、字符串轉(zhuǎn)時(shí)間等,但有時(shí)候需要使用自定義的屬性,則需要自定義轉(zhuǎn)換類了

一、萬能的字符串

當(dāng)然,任何時(shí)候都可以使用字符串作為屬性的值,從配置文件里讀取出來,如下:

配置文件內(nèi)容為:

pkslow.admin=larry|18|admin@pkslow.com

通過|分割,分別是名字、年齡和郵箱。

對(duì)應(yīng)屬性為:

@Value("${pkslow.admin}")
private String admin;

使用字符串,總是可以獲取,并且不會(huì)報(bào)錯(cuò)。我們可以在使用屬性的時(shí)候,再轉(zhuǎn)換成其它Bean

但這樣做有一些問題:

  • 無法做配置檢驗(yàn),不管是否配置錯(cuò)誤,String類型的屬性都是可以讀取的;
  • 任何地方使用,都需要做顯式轉(zhuǎn)換。

二、自定義轉(zhuǎn)換類

使用自定義轉(zhuǎn)換類是更方便和安全的做法。我們來看看怎么實(shí)現(xiàn)。

先定義一個(gè)Java Bean,用以表示實(shí)際的配置內(nèi)容:

package com.pkslow.cloud.rest.model;

public class Admin {
    private String name;
    private Integer age;
    private String email;

    public Admin(String name, Integer age, String email) {
        this.name = name;
        this.age = age;
        this.email = email;
    }
  //getter and setter
}

接著肯定需要一個(gè)轉(zhuǎn)換類,需要實(shí)現(xiàn)Converter接口:

package com.pkslow.cloud.rest.model;

import org.springframework.core.convert.converter.Converter;

public class AdminConverter implements Converter<String, Admin> {
    @Override
    public Admin convert(String s) {
        String[] strings = s.split("\\|");
        return new Admin(strings[0], Integer.parseInt(strings[1]), strings[2]);
    }
}

這個(gè)轉(zhuǎn)換類就是轉(zhuǎn)換邏輯,如果把字符串轉(zhuǎn)換成對(duì)應(yīng)的類。

完成以上兩步,關(guān)鍵是如果告訴Spring我具備了這個(gè)轉(zhuǎn)換能力,并幫我轉(zhuǎn)換。需要把轉(zhuǎn)換類綁定一下:

package com.pkslow.cloud.rest.config;

import com.pkslow.cloud.rest.model.AdminConverter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.ConversionServiceFactoryBean;

import java.util.Collections;

@Configuration
public class AdminConversionServiceConfig {
    @Bean
    public ConversionServiceFactoryBean conversionService() {
        ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean();
        factoryBean.setConverters(Collections.singleton(new AdminConverter()));
        return factoryBean;
    }
}

有了以上功能,使用就非常簡單了。配置不變,使用如下:

package com.pkslow.cloud.rest;

import com.pkslow.cloud.rest.model.Admin;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PkslowController {

    @Value("${pkslow.admin}")
    private Admin adminBean;

    @GetMapping("/getAdminBean")
    public Admin getAdminBean() {
        return adminBean;
    }
}

屬性的類型為Admin,是一個(gè)自定義的類。啟動(dòng)訪問后獲取如下:

$ curl localhost:8081/getAdminBean

{"name":"larry","age":18,"email":"admin@pkslow.com"}

說明成功讀取了配置,并轉(zhuǎn)換成我們想要的domain Object

嘗試把配置改為:pkslow.admin=larry|18a|admin@pkslow.com,則啟動(dòng)時(shí)會(huì)報(bào)錯(cuò):

Caused by: org.springframework.core.convert.ConversionFailedException: 

Failed to convert from type [java.lang.String] to type [@org.springframework.beans.factory.annotation.Value com.pkslow.cloud.rest.model.Admin] 

for value 'larry|18a|admin@pkslow.com'; 

nested exception is java.lang.NumberFormatException: For input string: "18a"

可以做配置檢查。

三、總結(jié)

自定義轉(zhuǎn)換類還是非常有用的。

代碼請(qǐng)查看:https://github.com/LarryDpk/pkslow-samples

以上就是淺談讓@Value更方便的Spring自定義轉(zhuǎn)換類的詳細(xì)內(nèi)容,更多關(guān)于Spring自定義轉(zhuǎn)換類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 解決IDEA刪除子模塊并重建后MAVEN無法識(shí)別的問題

    解決IDEA刪除子模塊并重建后MAVEN無法識(shí)別的問題

    這篇文章主要介紹了解決IDEA刪除子模塊并重建后MAVEN無法識(shí)別的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Spring底層核心源碼原理解析

    Spring底層核心源碼原理解析

    這篇文章主要介紹了Spring底層核心源碼原理解析,當(dāng)在某個(gè)方法上加了@Transactional注解后,就表示該方法在調(diào)用時(shí)會(huì)開啟Spring事務(wù),而這個(gè)方法所在的類所對(duì)應(yīng)的Bean對(duì)象會(huì)是該類的代理對(duì)象,需要的朋友可以參考下
    2023-09-09
  • Java編程中二維數(shù)組的初始化和基本操作實(shí)例

    Java編程中二維數(shù)組的初始化和基本操作實(shí)例

    這篇文章主要介紹了Java編程中二維數(shù)組的初始化和基本操作實(shí)例,是Java入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-10-10
  • SpringBoot解決跨域問題的五種方案

    SpringBoot解決跨域問題的五種方案

    跨域問題指的是不同站點(diǎn)之間,使用 ajax 無法相互調(diào)用的問題,跨域問題本質(zhì)是瀏覽器的一種保護(hù)機(jī)制,它的初衷是為了保證用戶的安全,防止惡意網(wǎng)站竊取數(shù)據(jù),那怎么解決這個(gè)問題呢?接下來我們一起來看,需要的朋友可以參考下
    2024-07-07
  • Java Comparable 和 Comparator 的詳解及區(qū)別

    Java Comparable 和 Comparator 的詳解及區(qū)別

    這篇文章主要介紹了Java Comparable 和 Comparator 的詳解及區(qū)別的相關(guān)資料,Comparable 自然排序和Comparator 定制排序的實(shí)例,需要的朋友可以參考下
    2016-12-12
  • java學(xué)習(xí)之理解自動(dòng)拆裝箱特性

    java學(xué)習(xí)之理解自動(dòng)拆裝箱特性

    這篇文章主要介紹java自動(dòng)拆裝箱特性以及java自動(dòng)拆裝箱的應(yīng)用,有需要的朋友可以借鑒參考下,希望可以有所幫助,祝大家早日升職加薪
    2021-09-09
  • JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解

    JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解

    這篇文章主要為大家介紹了JUC循環(huán)屏障CyclicBarrier與CountDownLatch區(qū)別詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • SpringBoot項(xiàng)目Docker部署三種方式

    SpringBoot項(xiàng)目Docker部署三種方式

    本文主要介紹了SpringBoot項(xiàng)目Docker部署三種方式,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-08-08
  • RocketMQ消息存儲(chǔ)文件的加載與恢復(fù)機(jī)制源碼分析

    RocketMQ消息存儲(chǔ)文件的加載與恢復(fù)機(jī)制源碼分析

    這篇文章主要介紹了RocketMQ源碼分析之消息存儲(chǔ)文件的加載與恢復(fù)機(jī)制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • Java SimpleDateFormat中英文時(shí)間格式化轉(zhuǎn)換詳解

    Java SimpleDateFormat中英文時(shí)間格式化轉(zhuǎn)換詳解

    這篇文章主要為大家詳細(xì)介紹了Java SimpleDateFormat中英文時(shí)間格式化轉(zhuǎn)換,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-12-12

最新評(píng)論

江安县| 陆丰市| 濮阳市| 德保县| 福泉市| 德兴市| 永清县| 息烽县| 湘西| 巴青县| 深圳市| 古蔺县| 黎川县| 龙泉市| 哈巴河县| 昔阳县| 无棣县| 邹城市| 吉木乃县| 平遥县| 繁昌县| 西昌市| 枣庄市| 武鸣县| 筠连县| 竹溪县| 巴林左旗| 湘潭市| 巴彦县| 中卫市| 五寨县| 商洛市| 自治县| 遂川县| 嘉善县| 澜沧| 班玛县| 施甸县| 德清县| 靖西县| 砚山县|