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

SpringBoot中DTO/VO/Entity相互轉換詳解

 更新時間:2025年01月22日 09:50:18   作者:會說法語的豬  
在我們平時開發(fā)中,dto、vo、entity之間的相互轉換是很頻繁的操作,這篇文章就簡單記錄一下在平時開發(fā)中SpringBoot的轉換方法,希望對大家有所幫助

在我們平時開發(fā)中,dto、vo、entity之間的相互轉換是很頻繁的操作,這篇就簡單記錄一下我在平時開發(fā)中轉換的方法。

在這之前先簡單描述一下dto、vo、entity

DTO:一般我們在開發(fā)中會定義數據傳輸對象(Data Transfer Object, DTO)來接收前端傳遞的參數是最常見的。

VO:平時開發(fā)中,一般會定義VO(view object)來封裝返回給前端的數據

Entity:在我們開發(fā)中,Entity適用于表示持久化對象的核心組件之一。它通常與數據庫中的表直接對應,用于映射數據庫記錄到應用程序的對象

我們在平時的增刪改查中,簡單來說就是

就像新增操作,一般會使用dto來接受前端傳遞的參數,然后將dto轉為Entity,再set一些創(chuàng)建時間之類的字段,然后再將Entity實體對象數據插入到數據庫中。

查詢操作,先從數據庫查詢出數據即Entity,然后再將Entity轉為VO視圖數據,再返回給前端。

我這里平時開發(fā)中,會使用下面封裝的工具類來進行dto、vo、entity之間的轉換,代碼如下:

首先pom.xml引入依賴:

<!-- JSON 解析器和生成器 -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.83</version>
</dependency>

封裝JSONUtil類 

package com.wft.utils;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.parser.Feature;
import com.alibaba.fastjson.serializer.SerializerFeature;
import java.util.List;
import java.util.Map;
 
public class JsonUtil {
    public JsonUtil() {
 
    }
 
    public static List listToJsonField(List lists) {
        String jsonStr = JSONArray.toJSONString(lists, new SerializerFeature[]{SerializerFeature.WriteMapNullValue});
        List list = (List)JSONArray.parseObject(jsonStr, List.class);
        return list;
    }
 
    public static Map<String, Object> entityToMap(Object object) {
        String jsonStr = JSONObject.toJSONString(object);
        Map<String, Object> map = (Map)JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>() {
        }, new Feature[0]);
        return map;
    }
 
    public static Map<String, String> entityToMaps(Object object) {
        String jsonStr = JSONObject.toJSONString(object);
        Map<String, String> map = (Map)JSONObject.parseObject(jsonStr, new TypeReference<Map<String, String>>() {
        }, new Feature[0]);
        return map;
    }
 
    public static Map<String, Object> stringToMap(String object) {
        Map<String, Object> map = (Map)JSONObject.parseObject(object, new TypeReference<Map<String, Object>>() {
        }, new Feature[0]);
        return map;
    }
 
    public static <T> T getJsonToBean(String jsonData, Class<T> clazz) {
        return JSON.parseObject(jsonData, clazz);
    }
 
    public static JSONArray getJsonToJsonArray(String json) {
        return JSONArray.parseArray(json);
    }
 
    public static <T> JSONArray getListToJsonArray(List<T> list) {
        return JSONArray.parseArray(getObjectToString(list));
    }
 
    public static String getObjectToString(Object object) {
        return JSON.toJSONString(object, new SerializerFeature[]{SerializerFeature.WriteMapNullValue});
    }
 
    public static String getObjectToStringDateFormat(Object object, String dateFormat) {
        return JSON.toJSONStringWithDateFormat(object, dateFormat, new SerializerFeature[]{SerializerFeature.WriteMapNullValue});
    }
 
    public static <T> List<T> getJsonToList(String jsonData, Class<T> clazz) {
        return JSON.parseArray(jsonData, clazz);
    }
 
    public static List<Map<String, Object>> getJsonToListMap(String jsonData) {
        return (List)JSON.parseObject(jsonData, new TypeReference<List<Map<String, Object>>>() {
        }, new Feature[0]);
    }
 
    public static List<Map<String, Object>> getJsonToList(JSONArray jsonArray) {
        return (List)JSON.parseObject(JSON.toJSONString(jsonArray), new TypeReference<List<Map<String, Object>>>() {
        }, new Feature[0]);
    }
 
    public static <T> T getJsonToBean(Object dto, Class<T> clazz) {
        return JSON.parseObject(getObjectToString(dto), clazz);
    }
 
    public static <T> List<T> getJsonToList(Object dto, Class<T> clazz) {
        return JSON.parseArray(getObjectToString(dto), clazz);
    }
}

平時使用中我一般使用最多的就是JsonUtil.getJsonToBean方法,就是進行dto、vo、entity對象之間的相互轉換,簡單聚個例子如下:

示例:

前端傳遞DTO(name、age、birthTime)過來,然后我們轉為VO(ame、age、birthTime、creatorTime)并返回。

DTO類:

package com.wft.model.testJson;
 
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
 
@Data
public class TestJsonForm {
 
    /** 姓名 **/
    @JsonProperty("name")
    private String name;
 
    /** 年齡 **/
    @JsonProperty("age")
    private Integer age;
 
    /** 出生日期 **/
    @JsonProperty("birthTime")
    private String birthTime;
 
}

VO:

package com.wft.model.testJson;
 
import com.alibaba.fastjson.annotation.JSONField;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
 
import java.util.Date;
 
@Data
public class TestJsonVo {
 
    @JSONField(name = "name")
    private String name;
 
    @JSONField(name = "age")
    private Integer age;
 
    @JSONField(name = "birthTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date birthTime;
 
    @JSONField(name = "birthTime")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
    private Date creatorTime;
}

Controller:

package com.wft.controller;
 
import com.wft.model.ActionResult;
import com.wft.model.testJson.TestJsonForm;
import com.wft.model.testJson.TestJsonVo;
import com.wft.utils.JsonUtil;
import org.springframework.web.bind.annotation.*;
 
import java.util.Date;
 
@RestController
@RequestMapping("/json")
public class TestJsonController {
 
    @PostMapping("/save")
    public ActionResult uploadTest(@RequestBody TestJsonForm testJsonForm) {
        // 將dto轉為vo
        TestJsonVo vo = JsonUtil.getJsonToBean(testJsonForm, TestJsonVo.class);
        vo.setCreatorTime(new Date());
        return ActionResult.success(vo);
    }
 
}

@JsonProperty

大家能看到DTO中,我使用了 @JsonProperty 注解,這個很簡單,其實就是標識前端傳遞的參數字段是什么,就是允許我們后端接受的參數字段和前端傳遞的字段可以不一致,如果不一致我們后端就可以使用@JsonProperty進行映射。

上面我們定義的name字段,如果前端傳遞的字段為cusname,我們就可以在name字段上使用這樣的注解@JsonProperty("cusname")這樣設置。

@JSONField

同樣的我在VO中使用@JSONField注解,上面的例子是把DTO轉為VO,VO中的@JSONField對應的就是DTO中的字段

其實我們平時開發(fā)中,只要字段都對應好,完全不需要使用這兩個注解。 

上面VO中還使用了@JsonFormat 注解,這個是格式化時間的,將Date類型轉為String類型yyyy-MM-dd HH:mm:ss返回給前端。

以上就是SpringBoot中DTO/VO/Entity相互轉換詳解的詳細內容,更多關于SpringBoot DTO VO Entity相互轉換的資料請關注腳本之家其它相關文章!

相關文章

  • SpringBoot統(tǒng)一API響應結果封裝的示例詳解

    SpringBoot統(tǒng)一API響應結果封裝的示例詳解

    在Spring Boot項目中,統(tǒng)一API響應結果封裝是一種常用的技術實踐,旨在提高開發(fā)效率、降低代碼重復率,并提供一致的API響應格式,從而簡化前后端交互和錯誤處理,感興趣的小伙伴可以了解下
    2025-03-03
  • java生成隨機數的方法

    java生成隨機數的方法

    這篇文章主要介紹了java生成隨機數的方法,涉及java隨機數及字符串操作的相關技巧,需要的朋友可以參考下
    2015-05-05
  • Java實現二叉樹的建立、計算高度與遞歸輸出操作示例

    Java實現二叉樹的建立、計算高度與遞歸輸出操作示例

    這篇文章主要介紹了Java實現二叉樹的建立、計算高度與遞歸輸出操作,結合實例形式分析了Java二叉樹的創(chuàng)建、遍歷、計算等相關算法實現技巧,需要的朋友可以參考下
    2019-03-03
  • 詳解5種Java中常見限流算法

    詳解5種Java中常見限流算法

    在高并發(fā)系統(tǒng)中,出于系統(tǒng)保護角度考慮,通常會對流量進行限流;不但在工作中要頻繁使用,而且也是面試中的高頻考點。本文就為大家整理了5種Java中常見限流算法,需要的可以參考一下
    2023-04-04
  • Java 入門圖形用戶界面設計之單選按鈕

    Java 入門圖形用戶界面設計之單選按鈕

    圖形界面(簡稱GUI)是指采用圖形方式顯示的計算機操作用戶界面。與早期計算機使用的命令行界面相比,圖形界面對于用戶來說在視覺上更易于接受,本篇精講Java語言中關于圖形用戶界面的單選按鈕
    2022-02-02
  • Java?中的?synchronized?關鍵字詳解

    Java?中的?synchronized?關鍵字詳解

    本文詳細介紹了Java中的synchronized關鍵字,包括其基本概念、工作原理、使用場景、性能優(yōu)化技巧以及常見問題與解決方案,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • Springboot項目保存本地系統(tǒng)日志文件的實現方法

    Springboot項目保存本地系統(tǒng)日志文件的實現方法

    這篇文章主要介紹了Springboot項目保存本地系統(tǒng)日志文件的實現方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04
  • Java內存之happens-before和重排序

    Java內存之happens-before和重排序

    在JMM(Java內存模型)中,如果一個操作執(zhí)行的結果需要對另一個操作可見,那么這兩個操作之間必須存在happens-before關系。下面小編來簡單介紹一下
    2019-05-05
  • 將Java項目打包成可執(zhí)行的jar包

    將Java項目打包成可執(zhí)行的jar包

    這篇文章主要介紹了將Java項目打包成可執(zhí)行的jar包,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-06-06
  • Java項目時的命名規(guī)范使用及說明

    Java項目時的命名規(guī)范使用及說明

    文章總結了SpringBoot項目命名規(guī)范,包括項目、包、類、方法、變量、配置文件、Starter、API、數據庫和其它命名規(guī)則,以確保代碼的一致性和可讀性
    2026-01-01

最新評論

赫章县| 白玉县| 彩票| 滦平县| 宿州市| 花莲市| 宝鸡市| 无锡市| 云南省| 明水县| 富源县| 扎赉特旗| 阿拉善左旗| 安平县| 噶尔县| 宽甸| 定南县| 红桥区| 宜川县| 黎川县| 略阳县| 辰溪县| 临潭县| 敦煌市| 正镶白旗| 千阳县| 临湘市| 昭通市| 日喀则市| 儋州市| 昭苏县| 长治县| 嘉祥县| 石狮市| 秭归县| 彩票| 万州区| 焦作市| 三河市| 木里| 芮城县|