成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

優雅至極!Spring Boot 3.3 中 ObjectMapper 的最佳實踐!

開發 前端
在本文中,我們展示了如何在 Spring Boot 3.3 中配置并優雅地使用 ObjectMapper?,并通過前后端配合實現了一個簡單的 JSON 數據展示示例。通過自定義 ObjectMapper 的配置,我們可以更靈活地處理 JSON 格式數據,使代碼更加簡潔和可維護。

在企業級開發中,數據的傳輸和存儲越來越依賴于 JSON 格式。在前后端分離架構中,后端通常以 JSON 格式響應數據,前端再對這些數據進行處理。而 ObjectMapper 作為 Jackson 框架中的核心組件,是 Java 世界中用于處理 JSON 格式數據的得力工具,它提供了豐富的 API 支持,將 Java 對象與 JSON 之間的相互轉換變得簡潔、高效。

但在實際開發中,很多開發者并沒有充分利用 ObjectMapper 的靈活性和配置能力,導致代碼冗余且難以維護。Spring Boot 通過自動化配置,簡化了 ObjectMapper 的使用,但為了更好地處理復雜場景,我們仍然可以自定義 ObjectMapper 的配置,使其更加靈活和優雅。

本文將詳細介紹 ObjectMapper 的基本功能,并結合代碼示例,展示如何在 SpringBoot 3.3 中通過配置來定制 ObjectMapper,從而更高效地處理 JSON 數據。此外,我們將展示如何通過前端使用 jQuery 來調用返回 JSON 格式數據的接口,并在頁面上進行動態展示。

ObjectMapper 的詳細說明

ObjectMapper 是 Jackson 庫的核心類,它的主要功能是將 Java 對象與 JSON 格式數據進行相互轉換。它支持以下幾種常見的操作:

  1. Java 對象轉換為 JSON: 通過 writeValueAsString 方法,將 Java 對象序列化為 JSON 字符串。
  2. JSON 轉換為 Java 對象: 使用 readValue 方法,將 JSON 字符串反序列化為 Java 對象。
  3. 配置自定義序列化/反序列化行為: ObjectMapper 提供了豐富的配置選項,可以通過注解或全局配置來定制序列化和反序列化過程。例如,可以忽略某些字段、格式化輸出、修改日期格式等。
  4. 處理復雜數據結構: 它還支持復雜的 Java 類型,如泛型、嵌套對象、集合等,能夠靈活地將這些復雜類型與 JSON 數據相互轉換。

運行效果:

圖片圖片

若想獲取項目完整代碼以及其他文章的項目源碼,且在代碼編寫時遇到問題需要咨詢交流,歡迎加入下方的知識星球。

項目環境配置

引入依賴

首先,在 pom.xml 中引入與 Jackson、Thymeleaf、Lombok 相關的依賴:

<?xml versinotallow="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>3.3.4</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.icoderoad</groupId>
	<artifactId>objectmapper</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>objectmapper</name>
	<description>Demo project for Spring Boot</description>
	
	<properties>
		<java.version>17</java.version>
	</properties>
	<dependencies>
		
		<!-- Spring Boot Starter Web -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- Thymeleaf 模板引擎 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

        <!-- Jackson JSON 處理 -->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>

        <!-- Lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <scope>provided</scope>
        </dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

application.yml 配置文件

ObjectMapper 的默認行為可以通過 application.yml 文件進行配置,例如設置是否美化輸出、是否忽略空字段等:

server:
  port: 8080
  
objectmapper:
  pretty-print: true
  default-property-inclusion: non_null

配置 ObjectMapper

創建配置類

我們可以通過 @ConfigurationProperties 注解來加載配置文件中的參數,并使用 Lombok 來減少冗余代碼。下面是一個簡單的 ObjectMapperConfig 配置類:

package com.icoderoad.objectmapper.config;

import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;

import com.fasterxml.jackson.annotation.JsonInclude;

import lombok.Data;

@Configuration
@ConfigurationProperties(prefix = "objectmapper")
@Data
public class ObjectMapperProperties {
    private boolean prettyPrint;
    private JsonInclude.Include defaultPropertyInclusion;
}

定義 ObjectMapper Bean

接著,我們可以根據上面的配置,定義一個自定義的 ObjectMapper 實例,并注冊為 Spring 的 Bean:

package com.icoderoad.objectmapper.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.fasterxml.jackson.databind.ObjectMapper;

@Configuration
public class JacksonConfig {

    private final ObjectMapperProperties objectMapperProperties;

    public JacksonConfig(ObjectMapperProperties objectMapperProperties) {
        this.objectMapperProperties = objectMapperProperties;
    }

    @Bean
    public ObjectMapper objectMapper() {
        ObjectMapper objectMapper = new ObjectMapper();
        // 是否格式化輸出
        if (objectMapperProperties.isPrettyPrint()) {
            objectMapper.writerWithDefaultPrettyPrinter();
        }
        // 配置屬性包含策略
        objectMapper.setSerializationInclusion(objectMapperProperties.getDefaultPropertyInclusion());
        return objectMapper;
    }
}

User 實體類

User 實體類使用 Lombok 簡化代碼:

package com.icoderoad.objectmapper.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
	private String name;
	private int age;
	private String city;
}

控制器層實現

我們將在控制器中使用自定義的 ObjectMapper,并提供一個返回 JSON 格式數據的接口。前端將使用 jQuery 來異步請求該接口并展示數據。

package com.icoderoad.objectmapper.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.icoderoad.objectmapper.entity.User;

@RestController
public class UserController {

    private final ObjectMapper objectMapper;

    public UserController(ObjectMapper objectMapper) {
        this.objectMapper = objectMapper;
    }

    @GetMapping("/api/user")
    public String getUser() throws JsonProcessingException {
        // 創建一個示例用戶對象
        User user = new User("張三", 30, "北京");

        // 將用戶對象轉換為 JSON 字符串
        return objectMapper.writeValueAsString(user);
    }
}

前端頁面展示

我們將使用 Thymeleaf 模板引擎結合 jQuery 和 Bootstrap 來構建一個簡單的用戶頁面,并通過 AJAX 請求展示后端的 JSON 數據。

在 src/main/resources/templates 目錄下創建 index.html 文件:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>用戶信息</title>
    <link  rel="stylesheet">
    <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.min.js"></script>
    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/js/bootstrap.bundle.min.js"></script>
</head>
<body>
<div class="container">
    <h1 class="mt-5">用戶信息</h1>
    <button id="loadUser" class="btn btn-primary">加載用戶數據</button>
    <pre id="userJson" class="bg-light p-3 mt-3"></pre>
</div>

<script>
    $(document).ready(function () {
        $('#loadUser').click(function () {
            $.ajax({
                url: '/api/user',
                method: 'GET',
                success: function (data) {
                    $('#userJson').text(JSON.stringify(JSON.parse(data), null, 4));
                }
            });
        });
    });
</script>
</body>
</html>

這個頁面包含一個按鈕,點擊后通過 jQuery 的 AJAX 請求從 /api/user 獲取 JSON 數據,并動態展示在頁面上。

總結

在本文中,我們展示了如何在 Spring Boot 3.3 中配置并優雅地使用 ObjectMapper,并通過前后端配合實現了一個簡單的 JSON 數據展示示例。通過自定義 ObjectMapper 的配置,我們可以更靈活地處理 JSON 格式數據,使代碼更加簡潔和可維護。

責任編輯:武曉燕 來源: 路條編程
相關推薦

2024-11-06 11:33:09

2024-10-15 10:38:32

2024-05-13 13:13:13

APISpring程序

2024-03-08 10:50:44

Spring技術應用程序

2024-11-28 09:43:04

2024-10-16 12:23:55

技巧Spring驗證

2024-11-21 14:42:31

2024-09-27 12:27:31

2023-09-22 10:12:57

2017-01-15 14:50:34

Spring Batc實踐

2024-09-05 09:35:58

CGLIBSpring動態代理

2024-08-02 09:15:22

Spring捕捉格式

2025-03-11 00:55:00

Spring停機安全

2024-09-29 10:39:48

RSocketWebSocket通信

2024-04-18 08:28:06

2025-02-07 09:11:04

JSON對象策略

2022-06-27 08:16:34

JSON格式序列化

2023-04-17 23:49:09

開發代碼Java

2024-12-06 09:27:28

2025-06-19 09:53:30

Spring性能優化服務器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 一区二区三区视频在线免费观看 | 欧美一级久久 | 一区二区免费在线观看 | 色婷婷久久| 婷婷在线视频 | 久久久av| 日韩av.com| 午夜影院在线观看免费 | 中文字幕久久精品 | 狠狠干天天干 | 久久久涩| 一区二区在线观看免费视频 | 久久久2o19精品 | 国产高清视频一区二区 | 亚洲免费三区 | 欧美另类视频在线 | 成人在线一区二区三区 | 成人午夜免费福利视频 | 极品电影院 | 国户精品久久久久久久久久久不卡 | 国产在视频一区二区三区吞精 | 免费久草| 久久精品性视频 | 久久人爽 | 国产一区二区 | 国产欧美视频一区二区三区 | 色综合色综合 | 精品日韩一区二区 | 狠狠爱一区二区三区 | 亚洲精品久久久久久宅男 | 久久久久久久91 | 亚洲第一在线视频 | 免费av观看 | 色网在线观看 | 五月天天丁香婷婷在线中 | 亚洲精品视频在线看 | 中文字幕在线精品 | 久久涩涩 | 有码在线 | 午夜午夜精品一区二区三区文 | 国产精品视频一二三 |