文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

优雅至极!Spring Boot 3.3 中 ObjectMapper 的最佳实践!

2024-11-29 18:09

关注

在企业级开发中,数据的传输和存储越来越依赖于 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 相关的依赖:



	4.0.0
	
		org.springframework.boot
		spring-boot-starter-parent
		3.3.4
		 
	
	com.icoderoad
	objectmapper
	0.0.1-SNAPSHOT
	objectmapper
	Demo project for Spring Boot
	
	
		17
	
	
		
		
        
            org.springframework.boot
            spring-boot-starter-web
        

        
        
            org.springframework.boot
            spring-boot-starter-thymeleaf
        

        
        
            com.fasterxml.jackson.core
            jackson-databind
        

        
        
            org.projectlombok
            lombok
            provided
        

		
			org.springframework.boot
			spring-boot-starter-test
			test
		
	

	
		
			
				org.springframework.boot
				spring-boot-maven-plugin
			
		
	

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 文件:




    
    用户信息
    
    
    


这个页面包含一个按钮,点击后通过 jQuery 的 AJAX 请求从 /api/user 获取 JSON 数据,并动态展示在页面上。

总结

在本文中,我们展示了如何在 Spring Boot 3.3 中配置并优雅地使用 ObjectMapper,并通过前后端配合实现了一个简单的 JSON 数据展示示例。通过自定义 ObjectMapper 的配置,我们可以更灵活地处理 JSON 格式数据,使代码更加简洁和可维护。

来源:路条编程内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯