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

SpringBoot定制JSON響應數(shù)據(jù)返回的示例代碼

 更新時間:2024年05月19日 16:35:56   作者:奮斗的袍子007  
@JsonView 是 Jackson 庫中的一個注解,它允許你定義哪些屬性應該被序列化到 JSON 中,基于不同的“視圖”或“配置”,在本文中,通過了解@JsonView,你將能夠更好地掌握如何在Spring Boot應用中定制JSON數(shù)據(jù)的輸出,需要的朋友可以參考下

一、前言

目前微服務項目中RESTful API已經(jīng)是前后端對接數(shù)據(jù)格式的標配模式了,RESTful API是一種基于REST(Representational State Transfer,表述性狀態(tài)轉移)原則的應用程序編程接口(Application Programming Interface),它主要用于Web服務之間的數(shù)據(jù)交互。RESTful API的設計遵循一些核心原則,這些原則使得API更加簡潔、靈活和可擴展。

在構建這些API時,我們往往需要根據(jù)不同的客戶端、用戶角色或業(yè)務需求,靈活地控制返回的數(shù)據(jù)結構和內(nèi)容。Jackson庫的@JsonView注解為我們提供了一種優(yōu)雅且高效的方式來實現(xiàn)這一目標。

二、問題場景

@JsonView 是 Jackson 庫中的一個注解,它允許你定義哪些屬性應該被序列化到 JSON 中,基于不同的“視圖”或“配置”。這在某些情況下非常有用,特別是當你想要為不同的用戶或API端點返回不同級別的詳細信息時。

例如,你可能有一個User對象,其中包含多個屬性,如id、name、email和password。當你為外部API或網(wǎng)站前端返回用戶數(shù)據(jù)時,你可能不希望包含password字段。但是,在內(nèi)部API或某些特定的情況下,你可能想要返回包含password的完整用戶對象。

這就是@JsonView可以幫助你的地方。你可以定義一個或多個“視圖”類,并為你的屬性指定應該出現(xiàn)在哪些視圖中。

在本文中,通過了解@JsonView,你將能夠更好地掌握如何在Spring Boot應用中定制JSON數(shù)據(jù)的輸出,從而提供更加靈活、安全且高效的RESTful API服務。

三、@JsonView主要應用場景

主要應用場景包括:

1.數(shù)據(jù)脫敏:在某些情況下,你可能不希望將數(shù)據(jù)庫中的某些敏感信息(如密碼、密鑰等)暴露給客戶端。通過使用 @JsonView,你可以定義哪些字段應該被包含在特定的視圖中,并在返回數(shù)據(jù)時僅包含這些字段。

2.自定義數(shù)據(jù)輸出:你可以根據(jù)客戶端的需求或權限級別,定義不同的視圖,并在返回數(shù)據(jù)時根據(jù)當前視圖的配置來輸出不同的字段組合。

四、代碼實戰(zhàn)

1. 定義實體類

package com.example.yddemo.JSONView;

import com.fasterxml.jackson.annotation.JsonView;

public class User {

    @JsonView(Views.Public.class)
    private Long id;

    @JsonView(Views.Public.class)
    private String name;

    @JsonView(Views.Internal.class)
    private String email;

    @JsonView(Views.Internal.class)
    private String password;

    public User(Long id, String name, String email, String password) {
        this.id = id;
        this.name = name;
        this.email = email;
        this.password = password;
    }

    public Long getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

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

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

2. 定義視圖控制器

public class Views {
    public static class Public { }
    public static class Internal extends Public { }
}

3. 在代碼中使用,添加@JsonView注解

package com.example.yddemo.JSONView;

import com.fasterxml.jackson.annotation.JsonView;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestDemoController {

    @GetMapping("/user/Public")
    @JsonView(Views.Public.class)
    public User userPublic() {
        User user = new User(1L, "Tom", "123123@163.com", "123456") ;
        return user  ;
    }

    @GetMapping("/user/Internal")
    @JsonView(Views.Internal.class)
    public User userInternal() {
        User user = new User(1L, "Tom", "123123@163.com", "123456") ;
        return user;
    }
}

輸出結果

不想使用在Controller接口上使用@JsonView注解方式,你還可以通過編程的方式控制,通過ObjectMapper類也能方便的控制json輸出。

  @GetMapping("/user/all/public")
    public String userAllPublic() {
        ObjectMapper mapper = new ObjectMapper();
        User user = new User(1L, "Tom", "123123@163.com", "123456") ;
        String publicJson;
        try {
            publicJson = mapper.writerWithView(Views.Public.class).writeValueAsString(user);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
        return publicJson;
    }

    @GetMapping("/user/all/internal")
    public String userAllInternal() {
        ObjectMapper mapper = new ObjectMapper();
        User user = new User(1L, "Tom", "123123@163.com", "123456") ;
        String internalJson;
        try {
            internalJson = mapper.writerWithView(Views.Internal.class).writeValueAsString(user);
        } catch (JsonProcessingException e) {
            throw new RuntimeException(e);
        }
        return internalJson;
    }

輸出結果

通過@JsonView的代碼展示思考一個問題?

如果沒有該注解你會通過什么方式實現(xiàn)?針對不同的場景定義不同的DTO?通過@JsonIgnore注解?

定義不同的DTO太麻煩,代碼大量冗余。使用@JsonIgnore注解所有的接口都將會忽略該字段,不能精準控制單個API接口。所以整體上看還是使用@JsonView更加的靈活。

五、總結

@JsonView 與 @JsonIgnore 區(qū)別

①. @JsonView 用于控制序列化時的字段組合,允許你根據(jù)不同的視圖返回不同的字段集合。

②. @JsonIgnore 則簡單地忽略某個字段,使其在序列化時不會被包含在 JSON 中。

最后@JsonView 提供了一種靈活且強大的方式來控制序列化的 JSON 數(shù)據(jù)。通過定義視圖和將它們應用到屬性和控制器方法上,你可以根據(jù)需要暴露不同級別的數(shù)據(jù),實現(xiàn) API 的數(shù)據(jù)定制化。

以上就是SpringBoot定制JSON響應數(shù)據(jù)返回的示例代碼的詳細內(nèi)容,更多關于SpringBoot定制JSON數(shù)據(jù)的資料請關注腳本之家其它相關文章!

相關文章

  • 深入分析Java并發(fā)編程之CAS

    深入分析Java并發(fā)編程之CAS

    這篇文章主要介紹了Java并發(fā)編程之CAS的相關資料,幫助大家更好的理解和學習Java并發(fā)編程,感興趣的朋友可以了解下
    2020-08-08
  • Springboot實現(xiàn)連接多個ElasticSearch數(shù)據(jù)庫的過程

    Springboot實現(xiàn)連接多個ElasticSearch數(shù)據(jù)庫的過程

    這篇文章介紹了如何在Springboot項目中實現(xiàn)與多個Elasticsearch數(shù)據(jù)庫的高效交互,本文結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2026-03-03
  • Java 簡化正則表達式的使用

    Java 簡化正則表達式的使用

    本篇文章主要介紹了Java 簡化正則表達式使用的相關知識,具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • 你知道Spring中為何不建議使用字段注入嗎

    你知道Spring中為何不建議使用字段注入嗎

    這篇文章主要給大家介紹了關于Spring中為何不建議使用字段注入的相關資料,通過本文你將對Spring的引入方式有更一步的了解,需要的朋友可以參考下
    2021-08-08
  • Springboot整合nacos報錯無法連接nacos的解決

    Springboot整合nacos報錯無法連接nacos的解決

    這篇文章主要介紹了Springboot整合nacos報錯無法連接nacos的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • JAVA代碼調用ffmpeg程序進行視頻轉碼和推流方式

    JAVA代碼調用ffmpeg程序進行視頻轉碼和推流方式

    本文介紹了如何通過Java代碼調用FFmpeg進行多媒體視頻處理,包括兩種方式:使用第三方封裝的jar包和使用ProcessBuilder類創(chuàng)建進程,兩種方式各有優(yōu)缺點,選擇時需根據(jù)具體需求和場景
    2025-02-02
  • 淺談自定義校驗注解ConstraintValidator

    淺談自定義校驗注解ConstraintValidator

    鑒于通用性和普遍性,Spring框架提供了validator組件,通過一些校驗器,可以對一些數(shù)據(jù)進行統(tǒng)一的完整性和有效性等校驗,即簡單又好用
    2021-06-06
  • java中關于控件JTextArea的幾個方法

    java中關于控件JTextArea的幾個方法

    這篇文章主要介紹了java中關于控件JTextArea的幾個方法,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Spring?IOC容器Bean注解創(chuàng)建對象組件掃描

    Spring?IOC容器Bean注解創(chuàng)建對象組件掃描

    這篇文章主要為大家介紹了Spring?IOC容器Bean注解創(chuàng)建對象組件掃描,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 為什么MyBatis中常用#{}而不使用${}

    為什么MyBatis中常用#{}而不使用${}

    本文主要介紹了為什么MyBatis中常用#{}而不使用${},文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-09-09

最新評論

高淳县| 安平县| 肇源县| 绍兴市| 北辰区| 新郑市| 贡觉县| 黑河市| 阳春市| 柞水县| 绿春县| 长垣县| 嘉鱼县| 岚皋县| 天祝| 崇仁县| 蕉岭县| 江安县| 玉门市| 青铜峡市| 富宁县| 丰台区| 西丰县| 孟连| 黄陵县| 开阳县| 鱼台县| 玉屏| 会宁县| 罗江县| 丹东市| 河西区| 汝城县| 玉龙| 上思县| 朔州市| 河池市| 景谷| 穆棱市| 惠东县| 剑川县|