自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

優(yōu)雅至極!Spring Boot 3.3 中 ObjectMapper 的最佳實(shí)踐!

開發(fā) 前端
在本文中,我們展示了如何在 Spring Boot 3.3 中配置并優(yōu)雅地使用 ObjectMapper?,并通過前后端配合實(shí)現(xiàn)了一個(gè)簡單的 JSON 數(shù)據(jù)展示示例。通過自定義 ObjectMapper 的配置,我們可以更靈活地處理 JSON 格式數(shù)據(jù),使代碼更加簡潔和可維護(hù)。

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

但在實(shí)際開發(fā)中,很多開發(fā)者并沒有充分利用 ObjectMapper 的靈活性和配置能力,導(dǎo)致代碼冗余且難以維護(hù)。Spring Boot 通過自動(dòng)化配置,簡化了 ObjectMapper 的使用,但為了更好地處理復(fù)雜場景,我們?nèi)匀豢梢宰远x ObjectMapper 的配置,使其更加靈活和優(yōu)雅。

本文將詳細(xì)介紹 ObjectMapper 的基本功能,并結(jié)合代碼示例,展示如何在 SpringBoot 3.3 中通過配置來定制 ObjectMapper,從而更高效地處理 JSON 數(shù)據(jù)。此外,我們將展示如何通過前端使用 jQuery 來調(diào)用返回 JSON 格式數(shù)據(jù)的接口,并在頁面上進(jìn)行動(dòng)態(tài)展示。

ObjectMapper 的詳細(xì)說明

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

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

運(yùn)行效果:

圖片圖片

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

項(xiàng)目環(huán)境配置

引入依賴

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

<?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 的默認(rèn)行為可以通過 application.yml 文件進(jìn)行配置,例如設(shè)置是否美化輸出、是否忽略空字段等:

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

配置 ObjectMapper

創(chuàng)建配置類

我們可以通過 @ConfigurationProperties 注解來加載配置文件中的參數(shù),并使用 Lombok 來減少冗余代碼。下面是一個(gè)簡單的 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

接著,我們可以根據(jù)上面的配置,定義一個(gè)自定義的 ObjectMapper 實(shí)例,并注冊(cè)為 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 實(shí)體類

User 實(shí)體類使用 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;
}

控制器層實(shí)現(xiàn)

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

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 {
        // 創(chuàng)建一個(gè)示例用戶對(duì)象
        User user = new User("張三", 30, "北京");

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

前端頁面展示

我們將使用 Thymeleaf 模板引擎結(jié)合 jQuery 和 Bootstrap 來構(gòu)建一個(gè)簡單的用戶頁面,并通過 AJAX 請(qǐng)求展示后端的 JSON 數(shù)據(jù)。

在 src/main/resources/templates 目錄下創(chuàng)建 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">加載用戶數(shù)據(jù)</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>

這個(gè)頁面包含一個(gè)按鈕,點(diǎn)擊后通過 jQuery 的 AJAX 請(qǐng)求從 /api/user 獲取 JSON 數(shù)據(jù),并動(dòng)態(tài)展示在頁面上。

總結(jié)

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

責(zé)任編輯:武曉燕 來源: 路條編程
相關(guān)推薦

2024-11-06 11:33:09

2024-10-15 10:38:32

2024-05-13 13:13:13

APISpring程序

2024-10-16 12:23:55

技巧Spring驗(yàn)證

2024-03-08 10:50:44

Spring技術(shù)應(yīng)用程序

2024-11-28 09:43:04

2024-11-21 14:42:31

2024-09-27 12:27:31

2023-09-22 10:12:57

2024-09-05 09:35:58

CGLIBSpring動(dòng)態(tài)代理

2017-01-15 14:50:34

Spring Batc實(shí)踐

2024-08-02 09:15:22

Spring捕捉格式

2025-03-11 00:55:00

Spring停機(jī)安全

2024-09-29 10:39:48

RSocketWebSocket通信

2022-06-27 08:16:34

JSON格式序列化

2025-02-07 09:11:04

JSON對(duì)象策略

2024-04-18 08:28:06

2024-12-06 09:27:28

2023-04-17 23:49:09

開發(fā)代碼Java

2024-09-14 11:31:27

@AsyncSpring異步
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)