日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

java 注解 数据字典_Spring实现数据字典翻译

發布時間:2025/3/21 javascript 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 注解 数据字典_Spring实现数据字典翻译 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在開始之前,首先我們要了解一個類:BeanPropertyWriter。

這個類是由SerializerFactory 工廠進行實例化的,其作用是對bean中的每個字段進行jackson操作的封裝,其中封裝了字段的一些元信息,和對此字段進行jackson序列化的操作。

采用Spring項目進行Web服務開發時,在獲取到數據后,Spring會通過BeanPropertyWriter對數據進行jackson封裝,將其轉換為Json串。

如果我們需要在不影響邏輯的情況下對數據進行字典翻譯,重寫此類是較好的選擇

字典翻譯實現步驟:

1.實現獲取字典的接口

public interface DictService{

/**

*key:字典類別

*value:字典代碼值

*return:字典代碼對應的value值

Object getValueByKey(String key,String value);

}

2.新建注解便于對需要轉換的字段進行區分

@Retention(RetentionPolicy.RUNTIME)

@Target({ElementType.FIELD})

@Documented

public @interface DictConverter{

String key() default "";

}

3.在需要翻譯的字段上添加該注解

@DictConverter(key="TEST)//數據字典中配有字典項為TEST的字典值

private String item;

4.新建SpringUtil類

@Component

public class SpringUtil implements ApplicationContextAware{

private static ApplicationContext applicationContext=null;

@Override

public void setApplicationContext(ApplicationContext applicationContext)throws BeansException{

if(this.applicationContext=null){

this.applicationContext=applicationContext;

}

}

//獲取applicationContext

public static ApplicationContext getApplicationContext(){return applicationContext;}

//通過name獲取Bean

public static Object getBean(String name){

return getApplicationContext().getBean(name);

}

//通過class獲取Bean

public static T Object getBean(Class clazz){

return getApplicationContext().getBean(clazz);

}

//通過name,以及Clazz返回指定的Bean

public static T Object getBean(String name,Class clazz){

return getApplicationContext().getBean(name,clazz);

}

}

5.重寫BeanPropertyWriter類(主要實現部分)

粘出BeanPropertyWriter的包名,在自己的工程下創建這個包

新建BeanPropertyWriter類,將jackson的源代碼copy過來

聲明剛才創建的DictService及注解

創建getDictService()用于獲取service對象

找到serializeAsField方法

private DictService dictService;

private DictConverter dictConverter;

private DictService getDictService(){

if(dictService==null){

dictService=SpringUtil.getBean(DictService.class);

}

return dictService;

}

public void serializeAsField(Object bean, JsonGenerator gen, SerializerProvider prov) throws Exception {

Object value = this._accessorMethod == null ? this._field.get(bean) : this._accessorMethod.invoke(bean);

//數據字典翻譯

try{

if(this._member.hasAnnotation(DictConverter.class)){

dictConverter=this._member.getAnnotation(DictConverter.class);

if(dictConverter!=null){

value=getDictService.getValueByKey(dictConverter.key(),value.toString());

if(value==null){

value = this._accessorMethod == null ? this._field.get(bean) : this._accessorMethod.invoke(bean);

}

}

}

}catch(Exception e){

//此處可能因字段類型出現報錯

value = this._accessorMethod == null ? this._field.get(bean) : this._accessorMethod.invoke(bean);

}

//以下部分不做修改,此處省略

}

* 為提高字典轉換速度,建議將DictService進行優化,將字典值存入緩存等,以提高頁面響應

總結

以上是生活随笔為你收集整理的java 注解 数据字典_Spring实现数据字典翻译的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。