国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - springboot @JsonSerialize的使用講解

springboot @JsonSerialize的使用講解

2022-02-16 14:53FS小山 Java教程

這篇文章主要介紹了springboot @JsonSerialize的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

 

@JsonSerialize的使用講解

解決前端顯示和后臺存儲數據單位不一致的問題。

在返回對象時,進行自定義數據格式轉換。

 

1.寫一個類繼承JsonSerializer 抽象類

實現其serialize()方法,然后在方法中寫入轉換規則即可

舉例是把Date時間戳從 毫秒 轉換成 秒 為單位

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider; 
import java.io.IOException;
import java.util.Date;
 
/**
 * @program: sell
 * @description: 時間轉換Json序列化工具
 * @author: Liang Shan
 * @create: 2019-08-06 16:58
 **/
public class Date2LongSerializer extends JsonSerializer<Date> {
    @Override
    public void serialize(Date date, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {
        jsonGenerator.writeNumber(date.getTime() / 1000);
    }
}

 

2.然后在傳輸的實體類中的屬性上

打上@JsonSerialize注解即可

import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.ls.sell.enums.OrderStatusEnum;
import com.ls.sell.enums.PayStatusEnum;
import com.ls.sell.util.serializer.Date2LongSerializer;
import lombok.Data;
import org.hibernate.annotations.DynamicUpdate; 
import javax.persistence.Entity;
import javax.persistence.Id;
import java.math.BigDecimal;
import java.util.Date;
 
/**
 * @program: sell
 * @description: 訂單主表
 * @author: Liang Shan
 * @create: 2019-07-24 09:44
 **/
@Entity
@Data
@DynamicUpdate
public class OrderMaster { 
    @Id
    private String orderId; 
    private String buyerName; 
    private String buyerPhone; 
    private String buyerAddress; 
    private String buyerOpenid; 
    private BigDecimal orderAmount;
 
    /** 訂單狀態,默認為新下單. */
    private Integer orderStatus = OrderStatusEnum.NEW.getCode(); 
    /** 支付狀態,默認為0未支付. */
    private Integer payStatus = PayStatusEnum.WAIT.getCode(); 
    @JsonSerialize(using = Date2LongSerializer.class)
    private Date createTime; 
    @JsonSerialize(using = Date2LongSerializer.class)
    private Date updateTime;
}

 

3.附加:還有一個比較好用的注解

如果返回對象中變量存在null,可以使用@JsonInclude(JsonInclude.Include.NON_NULL)注解來忽略為null的變量,這樣前端比較好處理

package com.ls.sell.dto; 
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.ls.sell.entity.OrderDetail;
import com.ls.sell.entity.OrderMaster;
import lombok.Data; 
import java.util.List;
 
/**
 * @program: sell
 * @description: 數據傳輸對象,傳給前端時忽略值為null的屬性
 * @author: Liang Shan
 * @create: 2019-07-25 16:05
 **/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class OrderDTO extends OrderMaster {
    private List<OrderDetail> orderDetailList;
}

使用注解之前的返回值:

springboot @JsonSerialize的使用講解

使用注解之后:

springboot @JsonSerialize的使用講解

還是比較好用的。

 

4.附加:之前附件3的注解,還是有個問題

如果一個一個實體類配置的話,未免太過麻煩,所以可以在配置文件中直接配置,yml配置文件如下:

springboot @JsonSerialize的使用講解

 

@JsonSerialize 相關使用(jsonUtil)

 

基礎注解使用

1、實現JsonSerializer接口

例:

public class MySerializerUtils extends JsonSerializer<Integer> {
    @Override
    public void serialize(Integer status, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonProcessingException {
        String statusStr = "";
         switch (status) {
             case 0:
                 statusStr = "新建狀態";
                 break;
                 }
                 jsonGenerator.writeString(statusStr);
     }
 }

2、添加注解

注:@JsonSerialize注解,主要應用于數據轉換,該注解作用在該屬性的getter()方法上。

①用在屬性上(自定義的例子)

@JsonSerialize(using = MySerializerUtils.class)
private int status;

②用在屬性上(jackson自帶的用法)

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonDeserialize(using = LocalDateTimeDeserializer.class)
    @JsonSerialize(using = LocalDateTimeSerializer.class)
private LocalDateTime sendTime;

③用在空對象上可以轉化

@JsonSerialize
public class XxxxxBody {
 // 該對象暫無字段,直接new了返回
}

 

框架層面的使用

jsonUtil工具類

實現json轉換時所有的null轉為“”

1、實現JsonSerializer類

public class CustomizeNullJsonSerializer {
    public static class NullStringJsonSerializer extends JsonSerializer<Object> {
        @Override
        public void serialize(Object value, JsonGenerator jsonGenerator,
                              SerializerProvider serializerProvider) throws IOException {
            jsonGenerator.writeString("");
        }
    }
}

2、實現BeanSerializerModifier類

public class CustomizeBeanSerializerModifier extends BeanSerializerModifier {
    @Override
    public List<BeanPropertyWriter> changeProperties(SerializationConfig config,
                                                     BeanDescription beanDesc,
                                                     List<BeanPropertyWriter> beanProperties) {
        for (int i = 0; i < beanProperties.size(); i++) {
            BeanPropertyWriter writer = beanProperties.get(i);
            if (isStringType(writer)) {
                writer.assignNullSerializer(new CustomizeNullJsonSerializer.NullStringJsonSerializer());
            }
        }
        return beanProperties;
    }
    /**
     * 是否是String
     */
    private boolean isStringType(BeanPropertyWriter writer) {
        Class<?> clazz = writer.getType().getRawClass();
        return CharSequence.class.isAssignableFrom(clazz) || Character.class.isAssignableFrom(clazz);
    }
}

3、工具類調用

public class JsonUtil {
//序列化時String 為null時變成""
    private static ObjectMapper mapperContainEmpty = new ObjectMapper();
static {
        mapperContainEmpty.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        mapperContainEmpty.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapperContainEmpty.setSerializerFactory(mapperContainEmpty.getSerializerFactory()
                .withSerializerModifier(new CustomizeBeanSerializerModifier()));
    }
 /**
     * 將對象轉換為Json串,針對String 類型 null 轉成""
     */
    public static String toJsonContainEmpty(Object o) {
        try {
            return mapperContainEmpty.writeValueAsString(o);
        } catch (IOException e) {
            logger.error("render object to json error: {}", e.getMessage(), e);
            throw new RuntimeException("render object to json error!", e);
        }
    }
}

 

附:jsonUtil完整代碼

/**
 * json串和對象之間相互轉換工具類
 */
public class JsonUtil {
    private static Logger logger = LoggerFactory.getLogger(JsonUtil.class);
    private static ObjectMapper mapper = new ObjectMapper();
    //序列化時String 為null時變成""
    private static ObjectMapper mapperContainEmpty = new ObjectMapper();
    static {
        mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapper.setSerializationInclusion(Include.NON_NULL);
        mapperContainEmpty.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
        mapperContainEmpty.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
        mapperContainEmpty.setSerializerFactory(mapperContainEmpty.getSerializerFactory()
                .withSerializerModifier(new CustomizeBeanSerializerModifier()));
    }
    /**
     * 將對象轉換為Json串
     */
    public static String toJson(Object o) {
        try {
            return mapper.writeValueAsString(o);
        } catch (IOException e) {
            logger.error("render object to json error: {}", e.getMessage(), e);
            throw new RuntimeException("render object to json error!", e);
        }
    }
    /**
     * 將對象轉換為Json串,針對String 類型 null 轉成""
     */
    public static String toJsonContainEmpty(Object o) {
        try {
            return mapperContainEmpty.writeValueAsString(o);
        } catch (IOException e) {
            logger.error("render object to json error: {}", e.getMessage(), e);
            throw new RuntimeException("render object to json error!", e);
        }
    }
    /**
     * 將Json串轉換為對象
     */
    public static <T> T toObject(String json, Class<T> clazz) {
        try {
            return mapper.readValue(json, clazz);
        } catch (IOException e) {
            logger.error("render json to object error: {}", e.getMessage(), e);
            throw new RuntimeException("render json to object error!", e);
        }
    }
    /**
     * 將Json串轉換為List
     */
    public static <T> List<T> toList(String json, Class<T> clazz) {
        try {
            JavaType javaType = mapper.getTypeFactory().constructParametricType(List.class, clazz);
            return mapper.readValue(json, javaType);
        } catch (IOException e) {
            logger.error("render json to List<T> error: {}", e.getMessage(), e);
            throw new RuntimeException("render json to List<T> error!", e);
        }
    }
    /**
     * 將Json串轉換為Map
     */
    public static <K, V> Map<K, V> toMap(String json, Class<K> clazzKey, Class<V> clazzValue) {
        try {
            JavaType javaType = mapper.getTypeFactory().constructParametricType(Map.class, clazzKey, clazzValue);
            return mapper.readValue(json, javaType);
        } catch (IOException e) {
            logger.error("render json to Map<K, V> error: {}", e.getMessage(), e);
            throw new RuntimeException("render json to Map<K, V> error!", e);
        }
    }
}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/qq_28021299/article/details/98635201

延伸 · 閱讀

精彩推薦
  • Java教程mybatis入門_動力節點Java學院整理

    mybatis入門_動力節點Java學院整理

    這篇文章主要為大家詳細介紹了mybatis入門的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    luoyan9802020-12-28
  • Java教程java中以DES的方式實現對稱加密并提供密鑰的實例

    java中以DES的方式實現對稱加密并提供密鑰的實例

    這篇文章主要介紹了java中以DES的方式實現對稱加密并提供密鑰的實例的相關資料,這里提供實例幫助大家學習理解這部分知識,需要的朋友可以參考下...

    Sahadev_4042020-12-11
  • Java教程新手初學Java數組

    新手初學Java數組

    數組是相同類型數據的有序集合數組描述的是相同類型的若干個數據,按照一定的先后次序排列組合而成。其中,每一個數據稱作一個數組元素,每個數組元素...

    Prpr君9142021-09-28
  • Java教程新手了解java基礎知識(一)

    新手了解java基礎知識(一)

    這篇文章主要介紹了Java基礎知識,本文介紹了Java語言相關的基礎知識、歷史介紹、主要應用方向等內容,需要的朋友可以參考下,希望對你有所幫助...

    保護眼睛5122021-09-26
  • Java教程Java中Json解析的方法分析

    Java中Json解析的方法分析

    這篇文章主要介紹了Java中Json解析的方法,結合實例形式分析了java針對json格式數據的解析實現步驟與相關操作技巧,需要的朋友可以參考下...

    張旭小俠2002020-10-05
  • Java教程Springboot使用@RefreshScope注解實現配置文件的動態加載

    Springboot使用@RefreshScope注解實現配置文件的動態加載

    本文主要介紹了Springboot使用@RefreshScope注解實現配置文件的動態加載,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參...

    小布19946572021-12-24
  • Java教程淺談JAVA工作流的優雅實現方式

    淺談JAVA工作流的優雅實現方式

    這篇文章主要介紹了淺談JAVA工作流的優雅實現方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下...

    一代天驕6922021-06-17
  • Java教程java身份證合法性校驗工具類實例代碼

    java身份證合法性校驗工具類實例代碼

    這篇文章主要給大家介紹了關于java身份證合法性校驗工具類的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價...

    哈嘍!沃爾德2852020-09-09
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 亚洲激情av | 国产综合网站 | 久草在线视频网 | 久久久国产视频 | 欧美 国产精品 | 国产精品成人国产乱一区 | 欧美日韩在线一区 | 国产精品美女久久久久aⅴ国产馆 | 亚洲精品在线视频观看 | 91视频免费观看 | 日韩av在线一区 | av一级久久| 在线91 | 中国性bbwbbwbbwbbw| 国产精品免费观看 | 国产精品精品 | 亚洲欧美日韩精品久久奇米色影视 | 狠狠干夜夜 | 精品国偷自产国产一区 | 午夜专区 | 91高清视频| 欧美日韩精品一区二区三区四区 | 91在线免费视频 | 最近2019中文字幕大全视频10 | 在线成人小视频 | 婷婷久久五月天 | 四房婷婷| 中文字幕一区在线观看视频 | 精品视频网 | 精品中文字幕在线 | 久久久久久亚洲 | 一区在线视频 | 日韩在线播放一区二区三区 | 成人av片在线观看 | 亚洲国产精品美女 | 亚洲一区中文字幕 | 久久久99久久久国产自输拍 | 久久久久久香蕉 | 日韩免费一区二区 | 国产精品久久久久久久久久久久冷 | 俺去操|