Javaweb 介面返回數據的定義與實現

本文將介紹 javaweb 如何定義介面返回數據,並提供相應的代碼示例。

一、介面返回數據的定義

在 javaweb 開發中,我們經常需要通過介面返回數據。介面返回的數據格式通常是標準的 JSON 或 XML 格式。在定義介面返回數據時,需要考慮以下幾點:

1、數據格式:介面返回數據應當以 JSON 或 XML 格式進行定義。

2、數據內容:應當包含所需要返回的數據,且數據應當具有良好的可讀性。

3、數據類型:數據類型應當根據實際情況進行定義,例如 String、Integer、List 等。

二、數據返回格式的實現

在代碼實現中,我們可以通過以下方式定義介面返回數據:

//定義返回數據類
public class ResultData {
    // 狀態碼
    private int code;
    // 返回信息
    private String message;
    // 返回數據
    private Object data;
    // getter and setter方法
}

//定義返回結果工具類
public class ResultUtils {
    // 返回成功信息
    public static ResultData success(Object data){
        ResultData resultData = new ResultData();
        resultData.setCode(0);
        resultData.setMessage("success");
        resultData.setData(data);
        return resultData;
    }
    // 返回失敗信息,包含錯誤碼和錯誤信息
    public static ResultData error(int code, String message){
        ResultData resultData = new ResultData();
        resultData.setCode(code);
        resultData.setMessage(message);
        resultData.setData(null);
        return resultData;
    }
}

在介面中,我們可以根據業務邏輯調用相應的返回結果工具類

@RestController
public class UserController {
    @GetMapping("/get/user")
    public ResultData getUser(){
        User user = userService.getUser();
        if(user != null){
            return ResultUtils.success(user);
        }else{
            return ResultUtils.error(1001, "user not exist");
        }
    }
}

以上代碼示例中,我們定義了一個 ResultData 類來封裝介面返回的數據,並提供了一個 ResultUtils 工具類來生成不同的返回結果。在 UserController 類的 getUser 介面中,根據業務邏輯返回相應的結果。

三、數據格式化的實現

在實際開發中,我們需要對介面返回的數據進行格式化處理,以滿足不同應用場景的需求。以下是一些常見的數據格式化處理方式:

1、時間格式化

在介面返回的數據中,時間一般以字元串的形式呈現。為了滿足前端的格式要求,我們需要對時間進行格式化處理

@RestController
public class UserController {
    @GetMapping("/get/user")
    public ResultData getUser(){
        User user = userService.getUser();
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        String createTime = dateFormat.format(user.getCreateTime());

        Map resMap = new HashMap<>();
        resMap.put("userId", user.getId());
        resMap.put("userName", user.getName());
        resMap.put("createTime", createTime);

        return ResultUtils.success(resMap);
    }
}

2、異常信息封裝

在介面返回的數據中,應當包含異常信息,以方便調試和排查問題

@RestControllerAdvice
public class ExceptionController {
    @ExceptionHandler(Exception.class)
    public ResultData handleException(Exception e) {
        log.error("系統異常:{}", e.getMessage(), e);
        return ResultUtils.error(500, "系統異常");
    }

    @ExceptionHandler(ParamException.class)
    public ResultData handleParamException(ParamException e){
        log.error("參數異常:{}", e.getMessage(), e);
        return ResultUtils.error(400, "參數異常:" + e.getMessage());
    }
}

在上述代碼中,我們使用 @RestControllerAdvice 標識該類為全局異常處理類,並通過 @ExceptionHandler 註解定義不同的異常處理方法。在異常處理方法中,我們可以根據不同的異常類型來封裝相應的異常信息。最終,通過 ResultUtils 工具類返回封裝好的數據。

四、數據加密的實現

在特定的場景下,介面返回的數據需要進行加密處理。

1、加密方式

常用的介面加密方式有對稱加密和非對稱加密。對稱加密通常採用 DES、AES 等演算法,非對稱加密通常採用 RSA、DSA 等演算法。

2、加密示例

以下是對稱加密的加密與解密示例:

public class DesUtils {
    private final static String DES_KEY = "des_key";
    private final static String DES_ALGORITHM = "DES/ECB/PKCS5Padding";

    /**
     * DES加密
     * @param plainText
     * @return
     */
    public static String encrypt(String plainText) throws Exception {
        Cipher cipher = Cipher.getInstance(DES_ALGORITHM);
        cipher.init(Cipher.ENCRYPT_MODE, generateDesKey());
        return Base64.encodeBase64String(cipher.doFinal(plainText.getBytes()));
    }

    /**
     * DES解密
     * @param cipherText
     * @return
     */
    public static String decrypt(String cipherText) throws Exception {
        Cipher cipher = Cipher.getInstance(DES_ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, generateDesKey());
        return new String(cipher.doFinal(Base64.decodeBase64(cipherText)));
    }

    /**
     * 生成DES key
     * @return
     * @throws Exception
     */
    private static SecretKeySpec generateDesKey() throws Exception {
        byte[] desKeyBytes = DigestUtils.md5(DES_KEY.getBytes());
        return new SecretKeySpec(desKeyBytes, DES_ALGORITHM);
    }
}

在以上代碼中,我們使用了 DES 演算法對字元串進行加密和解密,並通過 base64 編碼將加密後的字元串轉換為可讀的格式。

五、總結

本文介紹了 javaweb 如何定義介面返回數據,並提供了相應的代碼示例。同時,我們還介紹了介面返回數據的格式化處理、異常信息封裝和數據加密等方面的實現方式。

原創文章,作者:HJTYJ,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/373393.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HJTYJ的頭像HJTYJ
上一篇 2025-04-27 15:26
下一篇 2025-04-27 15:26

相關推薦

  • Python讀取CSV數據畫散點圖

    本文將從以下方面詳細闡述Python讀取CSV文件並畫出散點圖的方法: 一、CSV文件介紹 CSV(Comma-Separated Values)即逗號分隔值,是一種存儲表格數據的…

    編程 2025-04-29
  • Python中讀入csv文件數據的方法用法介紹

    csv是一種常見的數據格式,通常用於存儲小型數據集。Python作為一種廣泛流行的編程語言,內置了許多操作csv文件的庫。本文將從多個方面詳細介紹Python讀入csv文件的方法。…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • 如何用Python統計列表中各數據的方差和標準差

    本文將從多個方面闡述如何使用Python統計列表中各數據的方差和標準差, 並給出詳細的代碼示例。 一、什麼是方差和標準差 方差是衡量數據變異程度的統計指標,它是每個數據值和該數據值…

    編程 2025-04-29
  • Python定義函數判斷奇偶數

    本文將從多個方面詳細闡述Python定義函數判斷奇偶數的方法,並提供完整的代碼示例。 一、初步了解Python函數 在介紹Python如何定義函數判斷奇偶數之前,我們先來了解一下P…

    編程 2025-04-29
  • Python多線程讀取數據

    本文將詳細介紹多線程讀取數據在Python中的實現方法以及相關知識點。 一、線程和多線程 線程是操作系統調度的最小單位。單線程程序只有一個線程,按照程序從上到下的順序逐行執行。而多…

    編程 2025-04-29
  • Python爬取公交數據

    本文將從以下幾個方面詳細闡述python爬取公交數據的方法: 一、準備工作 1、安裝相關庫 import requests from bs4 import BeautifulSou…

    編程 2025-04-29
  • Python中的隊列定義

    本篇文章旨在深入闡述Python中隊列的定義及其應用,包括隊列的定義、隊列的類型、隊列的操作以及隊列的應用。同時,我們也會為您提供Python代碼示例。 一、隊列的定義 隊列是一種…

    編程 2025-04-29
  • Python兩張表數據匹配

    本篇文章將詳細闡述如何使用Python將兩張表格中的數據匹配。以下是具體的解決方法。 一、數據匹配的概念 在生活和工作中,我們常常需要對多組數據進行比對和匹配。在數據量較小的情況下…

    編程 2025-04-29
  • Python符號定義和使用方法

    本文將從多個方面介紹Python符號的定義和使用方法,涉及注釋、變數、運算符、條件語句和循環等多個方面。 一、注釋 1、單行注釋 # 這是一條單行注釋 2、多行注釋 “”” 這是一…

    編程 2025-04-29

發表回復

登錄後才能評論