欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

一、萬(wàn)能的字符串

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

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

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

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

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

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

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

但這樣做有一些問(wèn)題:

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

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

使用自定義轉(zhuǎn)換類(lèi)是更方便和安全的做法。我們來(lái)看看怎么實(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)換類(lèi),需要實(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)換類(lèi)就是轉(zhuǎn)換邏輯,如果把字符串轉(zhuǎn)換成對(duì)應(yīng)的類(lèi)。

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

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;
    }
}

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

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;
    }
}

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

$ curl localhost:8081/getAdminBean

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

說(shuō)明成功讀取了配置,并轉(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)換類(lèi)還是非常有用的。

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

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

相關(guān)文章

  • MyBatis-Plus實(shí)現(xiàn)2種分頁(yè)方法(QueryWrapper查詢(xún)分頁(yè)和SQL查詢(xún)分頁(yè))

    MyBatis-Plus實(shí)現(xiàn)2種分頁(yè)方法(QueryWrapper查詢(xún)分頁(yè)和SQL查詢(xún)分頁(yè))

    本文主要介紹了MyBatis-Plus實(shí)現(xiàn)2種分頁(yè)方法,主要包括QueryWrapper查詢(xún)分頁(yè)和SQL查詢(xún)分頁(yè),具有一定的參考價(jià)值,感興趣的可以了解一下
    2021-08-08
  • JAVA進(jìn)程突然消失問(wèn)題解決方案

    JAVA進(jìn)程突然消失問(wèn)題解決方案

    這篇文章主要介紹了JAVA進(jìn)程突然消失問(wèn)題解決方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • spring boot activiti工作流的搭建與簡(jiǎn)單使用

    spring boot activiti工作流的搭建與簡(jiǎn)單使用

    這篇文章主要給大家介紹了關(guān)于spring boot activiti工作流的搭建與簡(jiǎn)單使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-08-08
  • 面試中遇到的java逃逸分析問(wèn)題

    面試中遇到的java逃逸分析問(wèn)題

    這篇文章主要介紹了面試中遇到的java逃逸分析問(wèn)題,逃逸分析(Escape Analysis)簡(jiǎn)單來(lái)講就是,Java Hotspot 虛擬機(jī)可以分析新創(chuàng)建對(duì)象的使用范圍,并決定是否在 Java 堆上分配內(nèi)存的一項(xiàng)技術(shù)。,需要的朋友可以參考下
    2019-06-06
  • Java如何獲取Json中的數(shù)據(jù)實(shí)例代碼

    Java如何獲取Json中的數(shù)據(jù)實(shí)例代碼

    這篇文章主要給大家介紹了關(guān)于Java如何獲取Json中數(shù)據(jù)的相關(guān)資料,我們?cè)谌粘i_(kāi)發(fā)中少不了和JSON數(shù)據(jù)打交道,那么我們來(lái)看看JAVA中常用的JSON獲取方式,需要的朋友可以參考下
    2023-09-09
  • java synchronized 鎖機(jī)制原理詳解

    java synchronized 鎖機(jī)制原理詳解

    synchronized關(guān)鍵字是JAVA中常用的同步功能,提供了簡(jiǎn)單易用的鎖功能。這篇文章主要介紹了Java中synchronized關(guān)鍵字引出的多種鎖問(wèn)題,需要的朋友可以參考下
    2021-08-08
  • 使用IDEA進(jìn)行安卓開(kāi)發(fā)的詳細(xì)圖文教程

    使用IDEA進(jìn)行安卓開(kāi)發(fā)的詳細(xì)圖文教程

    安卓開(kāi)發(fā)本身就是Java開(kāi)發(fā)的一個(gè)分支,我們要確保計(jì)算機(jī)已經(jīng)安裝好JDK并做好了相關(guān)的配置,下面這篇文章主要給大家介紹了關(guān)于如何使用IDEA進(jìn)行安卓開(kāi)發(fā)的詳細(xì)圖文教程,需要的朋友可以參考下
    2023-04-04
  • MybatisPlus多數(shù)據(jù)源及事務(wù)解決思路

    MybatisPlus多數(shù)據(jù)源及事務(wù)解決思路

    這篇文章主要介紹了MybatisPlus多數(shù)據(jù)源及事務(wù)解決思路,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-01-01
  • java全角與半角標(biāo)點(diǎn)符號(hào)相互轉(zhuǎn)換詳解

    java全角與半角標(biāo)點(diǎn)符號(hào)相互轉(zhuǎn)換詳解

    這篇文章主要為大家介紹了java全角與半角標(biāo)點(diǎn)符號(hào)相互轉(zhuǎn)換詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • Java獲取漢字拼音的全拼和首拼實(shí)現(xiàn)代碼分享

    Java獲取漢字拼音的全拼和首拼實(shí)現(xiàn)代碼分享

    這篇文章主要介紹了Java獲取漢字拼音的全拼和首拼實(shí)現(xiàn)代碼分享,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下
    2015-06-06

最新評(píng)論