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

java序列化對象根據(jù)不同配置動態(tài)改變屬性名的方法

 更新時間:2022年05月25日 14:22:12   作者:shuai  
本文主要介紹了java序列化對象根據(jù)不同配置動態(tài)改變屬性名的方法,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

使用場景:自己項目對接多個外部系統(tǒng),各個外部系統(tǒng)使用的字段并沒有統(tǒng)一,所以要根據(jù)不同系統(tǒng)動態(tài)的輸出序列化數(shù)據(jù),使適應各個系統(tǒng)的要求

實現(xiàn)方式

使用自定義注解和fastjson實現(xiàn)需求

fastjson的NameFilter的作用:序列化時,屬性名變成自己指定的名稱

實現(xiàn)過程

自定義注解一:MyParamName

package xin.yangshuai.cipher.json;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * MyParamName
 *
 * @author shuai
 * @date 2021/3/23
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface MyParamName {

    String value() default "";

    NameEle[] names() default {};
}

value、names都是非必填

value:默認序列化的名稱

names:自定義注解二,數(shù)組形式

自定義注解二:NameEle

package xin.yangshuai.cipher.json;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * NameEle
 *
 * @author shuai
 * @date 2021/3/24
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER})
public @interface NameEle {
    String id();
    String value();
}

id:唯一標識,確定序列化后的屬性名

value:定義序列化后的屬性名

手寫MyNameFilter,實現(xiàn)fastjson的NameFilter

package xin.yangshuai.cipher.json;

import com.alibaba.fastjson.serializer.NameFilter;

import java.lang.reflect.Field;

/**
 * MyNameFilter
 *
 * @author shuai
 * @date 2021/3/23
 */
public class MyNameFilter implements NameFilter {

    private String id;

    public MyNameFilter() {
    }

    public MyNameFilter(String id) {
        this.id = id;
    }

    @Override
    public String process(Object o, String name, Object value) {
        try {
            Field field = o.getClass().getDeclaredField(name);
            MyParamName myParamName = field.getDeclaredAnnotation(MyParamName.class);
            NameEle[] nameEles = myParamName.names();
            String defaultName = myParamName.value();
            if (nameEles.length == 0 && defaultName.length() > 0) {
                return defaultName;
            }
            for (NameEle n : nameEles) {
                if (id.equals(n.id())) {
                    return n.value();
                }
            }
        } catch (Exception e) {
            return name;
        }
        return name;
    }
}

構造方法傳遞id屬性的值,與自定義注解二的id進行匹配,匹配成功則使用對應的屬性名

實體類,屬性上添加自定義注解

package xin.yangshuai.cipher.json;

import com.alibaba.fastjson.JSON;

/**
 * Person
 *
 * @author shuai
 * @date 2021/3/23
 */
public class Person {

    @MyParamName(names = {
            @NameEle(id = "ln", value = "i_d"),
            @NameEle(id = "jl", value = "_id")})
    private String id;

    @MyParamName("NAME")
    private String name;

    private String age;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", age='" + age + '\'' +
                '}';
    }
}

運行主方法測試

public static void main(String[] args) {
    Person person = new Person();
    person.setAge("18");
    person.setId("001");
    person.setName("張三");

    String s = JSON.toJSONString(person, new MyNameFilter("jl"));
    System.out.println(s);

    String s1 = JSON.toJSONString(person, new MyNameFilter("ln"));
    System.out.println(s1);
}

結果為:

{"age":"18","_id":"001","NAME":"張三"} {"age":"18","i_d":"001","NAME":"張三"}

參考

# java序列化對象,根據(jù)不同配置動態(tài)改變屬性名

到此這篇關于java序列化對象根據(jù)不同配置動態(tài)改變屬性名的方法的文章就介紹到這了,更多相關java序列化對象改變屬性名內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • java8中l(wèi)amba表達式的使用

    java8中l(wèi)amba表達式的使用

    這篇文章主要介紹了java8中l(wèi)amba表達式的使用,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-02-02
  • javascript與jsp發(fā)送請求到servlet的幾種方式實例

    javascript與jsp發(fā)送請求到servlet的幾種方式實例

    本文分別給出了javascript發(fā)送請求到servlet的5種方式實例與 jsp發(fā)送請求到servlet的6種方式實例
    2018-03-03
  • 一文弄懂fastjson

    一文弄懂fastjson

    fastjson?是一個java語言編寫的高性能且功能完善的JSON庫,本文主要介紹了fastjson的使用,具有一定的參考價值,感興趣的可以了解一下
    2023-05-05
  • Spring MVC整合FreeMarker的示例

    Spring MVC整合FreeMarker的示例

    這篇文章主要介紹了Spring MVC整合FreeMarker的示例,幫助大家更好的理解和使用Spring MVC,感興趣的朋友可以了解下
    2020-12-12
  • Java中@ConfigurationProperties實現(xiàn)自定義配置綁定問題分析

    Java中@ConfigurationProperties實現(xiàn)自定義配置綁定問題分析

    這篇文章主要介紹了@ConfigurationProperties實現(xiàn)自定義配置綁定問題,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-08-08
  • 一文詳解Reactor模型與實現(xiàn)示例

    一文詳解Reactor模型與實現(xiàn)示例

    這篇文章主要為大家介紹了Reactor模型與實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-03-03
  • 對ThreadLocal內(nèi)存泄漏及弱引用的理解

    對ThreadLocal內(nèi)存泄漏及弱引用的理解

    這篇文章主要介紹了對ThreadLocal內(nèi)存泄漏及弱引用的理解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • 如何在mybatis中向BLOB字段批量插入數(shù)據(jù)

    如何在mybatis中向BLOB字段批量插入數(shù)據(jù)

    這篇文章主要介紹了如何在mybatis中向BLOB字段批量插入數(shù)據(jù)的相關知識,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-10-10
  • Eclipse自定義啟動畫面和圖標的方法介紹

    Eclipse自定義啟動畫面和圖標的方法介紹

    這篇文章主要介紹了Eclipse自定義啟動畫面和圖標的方法介紹,以及一些eclipse的快捷鍵,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • Java擦除和轉換實例分析

    Java擦除和轉換實例分析

    這篇文章主要介紹了Java擦除和轉換,結合實例形式分析了java擦除和轉換概念、功能及相關操作技巧,需要的朋友可以參考下
    2019-07-07

最新評論