使用IntelliJ IDEA和Maven搭建SpringBoot集成Fastjson项目

使用IntelliJ IDEA和Maven搭建SpringBoot集成Fastjson项目

下面我将详细介绍如何在IntelliJ IDEA中使用Maven搭建一个集成Fastjson的SpringBoot项目,包含完整的环境配置和代码实现。

一、环境准备

  1. 软件要求
  • IntelliJ IDEA 2021.x或更高版本
  • JDK 1.8或更高版本(推荐JDK 11/17)
  • Maven 3.6+
  • Git (可选)
  1. 检查环境
java -version
mvn -v 

二、创建项目

  1. 使用IDEA创建SpringBoot项目

  2. 打开IntelliJ IDEA,选择"File" → “New” → “Project”

  3. 在左侧选择"Spring Initializr"

  4. 配置项目基本信息:

    • Name: springboot-fastjson-demo
    • Location: 选择项目存储路径
    • Type: Maven
    • Language: Java
    • Group: com.example
    • Artifact: demo
    • Package name: com.example.demo
    • Java version: 选择与本地匹配的版本(推荐11或17)
  5. 点击"Next"

  6. 选择依赖
    在"Dependencies"页面:

  7. 搜索并添加:

    • Spring Web
    • Lombok (可选,简化代码)
  8. 点击"Next" → “Finish”

三、配置Fastjson

  1. 添加Fastjson依赖

打开pom.xml,在<dependencies>部分添加:

<!-- Fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.25</version> <!-- 使用最新稳定版本 -->
</dependency>
  1. 完整pom.xml示例
<?xml version="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>2.7.0</version> <!-- 使用最新稳定版 --><relativePath/></parent><groupId>com.example</groupId><artifactId>demo</artifactId><version>0.0.1-SNAPSHOT</version><name>springboot-fastjson-demo</name><description>Demo project for Spring Boot with Fastjson</description><properties><java.version>11</java.version></properties><dependencies><!-- Spring Boot Starter Web --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- Fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.25</version></dependency><!-- Lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><!-- Test --><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><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

四、项目结构配置

  1. 创建包结构
src/main/java/com/example/demo/
├── config/       # 配置类
├── controller/   # 控制器 
├── model/        # 数据模型 
└── service/      # 服务层(可选)
  1. 配置Fastjson为默认JSON处理器

创建FastJsonConfig.java:

package com.example.demo.config;import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.support.config.FastJsonConfig;
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.List;@Configuration 
public class FastJsonConfig implements WebMvcConfigurer {@Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {// 1.创建FastJson消息转换器FastJsonHttpMessageConverter fastConverter = new FastJsonHttpMessageConverter();// 2.创建FastJson配置 FastJsonConfig fastJsonConfig = new FastJsonConfig();fastJsonConfig.setCharset(StandardCharsets.UTF_8);// 3.配置序列化特性 fastJsonConfig.setSerializerFeatures(SerializerFeature.PrettyFormat,          // 格式化输出SerializerFeature.WriteMapNullValue,     // 输出空字段SerializerFeature.WriteNullListAsEmpty,  // 空列表输出[]而非null SerializerFeature.DisableCircularReferenceDetect  // 禁止循环引用 );// 4.日期格式fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");// 5.处理中文乱码 List<MediaType> fastMediaTypes = new ArrayList<>();fastMediaTypes.add(MediaType.APPLICATION_JSON);fastConverter.setSupportedMediaTypes(fastMediaTypes);// 6.注入配置 fastConverter.setFastJsonConfig(fastJsonConfig);// 7.添加到转换器列表,并优先使用converters.add(0, fastConverter);}
}

五、创建模型和控制器

  1. 创建模型类

User.java:

package com.example.demo.model;import lombok.Data;@Data
public class User {private Long id;private String username;private Integer age;private String email;// 空构造器是Fastjson反序列化必需的 public User() {}public User(Long id, String username, Integer age) {this.id = id;this.username = username;this.age = age;}
}
  1. 创建控制器

UserController.java:

package com.example.demo.controller;import com.alibaba.fastjson.JSON;
import com.example.demo.model.User;
import org.springframework.web.bind.annotation.*;@RestController 
@RequestMapping("/api/users")
public class UserController {@GetMapping("/{id}")public User getUser(@PathVariable Long id) {User user = new User(id, "测试用户", 25);// 测试Fastjson序列化 String json = JSON.toJSONString(user);System.out.println("序列化结果: " + json);return user;}@PostMapping public User createUser(@RequestBody User user) {System.out.println("收到用户: " + user);// 在实际应用中,这里会保存用户到数据库 return user;}
}

六、安全配置

  1. 禁用AutoType功能

FastJsonConfig.java中添加:

import com.alibaba.fastjson.parser.ParserConfig;
import javax.annotation.PostConstruct;// 在FastJsonConfig类中添加
@PostConstruct
public void init() {// 禁用AutoType功能(安全考虑)ParserConfig.getGlobalInstance().setAutoTypeSupport(false);// 或者启用安全模式(更严格)// ParserConfig.getGlobalInstance().setSafeMode(true);// 设置白名单ParserConfig.getGlobalInstance().addAccept("com.example.demo.model.");
}

七、运行和测试

  1. 启动应用

运行DemoApplication中的main方法

  1. 测试API

使用curl测试:

获取用户
curl http://localhost:8080/api/users/1创建用户 
curl -X POST http://localhost:8080/api/users \-H "Content-Type: application/json" \-d '{"id":2,"username":"新用户","age":30}'

使用Postman测试:

  1. GET请求: http://localhost:8080/api/users/1
  2. POST请求: http://localhost:8080/api/users
    • Body → raw → JSON
    • 输入: {"id":2,"username":"新用户","age":30}

八、验证Fastjson配置

创建测试类验证配置是否生效:

package com.example.demo;import com.alibaba.fastjson.JSON;
import com.example.demo.model.User;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;import static org.junit.jupiter.api.Assertions.*;@SpringBootTest
class DemoApplicationTests {@Testvoid testFastjsonSerialization() {User user = new User(1L, "测试", 20);String json = JSON.toJSONString(user);assertTrue(json.contains("\"username\":\"测试\""));User parsedUser = JSON.parseObject(json, User.class);assertEquals(user.getUsername(), parsedUser.getUsername());}
}

九、常见问题解决

  1. 中文乱码问题:

    • 确保配置了正确的字符集: fastJsonConfig.setCharset(StandardCharsets.UTF_8);
  2. 日期格式化问题:

    • 检查日期格式配置: fastJsonConfig.setDateFormat("yyyy-MM-dd HH:mm:ss");
  3. 循环引用问题:

    • 启用禁用循环引用检测: SerializerFeature.DisableCircularReferenceDetect
  4. 依赖冲突问题:

    • 如果同时存在Jackson和Fastjson,确保Fastjson优先级更高
    • 可以在application.properties中添加: spring.http.converters.preferred-json-mapper=fastjson

通过以上步骤,您已经成功在IntelliJ IDEA中使用Maven搭建了一个集成Fastjson的SpringBoot项目,并进行了基本的安全配置。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/89546.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/89546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java从入门到精通!第九天, 重点!(集合(一))

十一、集合1. 为什么要使用集合(1) 数组存在的弊端1) 数组在初始化之后&#xff0c;长度就不能改变&#xff0c;不方便扩展。2) 数组中提供的属性和方法比较少&#xff0c;不便于进行添加、删除、修改等操作&#xff0c;并且效率不高&#xff0c;同时无法直接存储元素的个数。3…

为什么使用时序数据库

为什么使用时序数据库&#xff1f; 时序数据库&#xff08;Time-Series Database, TSDB&#xff09;是专为时间序列数据优化的数据库&#xff0c;相比传统关系型数据库&#xff08;如MySQL&#xff09;或NoSQL数据库&#xff08;如MongoDB&#xff09;&#xff0c;它在以下方面…

计算机网络:(十一)多协议标记交换 MPLS

计算机网络&#xff1a;&#xff08;十一&#xff09;多协议标记交换 MPLS前言一、传统网络的问题二、MPLS&#xff1a;给数据包贴个“标签”三、MPLS的工作流程1. 入站2. 中间3. 出站四、MPLS的能力前言 前面我们讲解了计算机网络中网络层的相关知识&#xff0c;包括网络层转发…

docker run elasticsearch 报错

谷粒商城 p103 前提条件&#xff1a; 下载镜像文件 #存储和检索数据 docker pull elasticsearch:7.4.2 #可视化检索数据 docker pull kibana:7.4.2 创建挂载的文件和配置 mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data echo "http.h…

巧用Callbre RVE生成DRC HTML report及CTO的使用方法

对于后端版图人员&#xff0c;在芯片TO前的LV signoff阶段&#xff0c;犹如一段漫长而有期待的朝圣之旅&#xff0c;需要耐心&#xff0c;毅力和信心&#xff0c;在庞杂的DRC中找到一条收敛之路。为了让此路更为清晰收敛&#xff0c;Calibre提供了一套可追溯对比的富文本方式-H…

产品需求文档(PRD)格式全解析:从 RP 到 Word 的选择与实践

产品需求文档&#xff08;PRD&#xff09;的形式多种多样&#xff0c;但核心目标始终一致&#xff1a;清晰传递产品需求&#xff0c;让团队高效协作。不同公司对 PRD 的格式要求可能不同&#xff0c;有的偏爱直接在原型工具中撰写&#xff0c;有的则习惯用 Word 整理归档。本文…

【C++】入门阶段

一、初始化C中的初始化指为变量赋予初始值的过程。初始化方式多样&#xff0c;适用于不同场景。char cha0; char chb{0}; char chc(\0); char chdcha; char che{};注意事项优先使用列表初始化&#xff08;{}&#xff09;&#xff0c;避免窄化转换风险。在c11中{ }在变量&#x…

tailscale在ubuntu22.04上使用

支持 x86 和 ARM 架构 CPU 的软件包已提供 32 位和 64 位版本。 添加 Tailscale 的软件包签名密钥及仓库&#xff1a; curl -fsSL https://pkgs.tailscale.com/stable/ubuntu/noble.noarmor.gpg | sudo tee /usr/share/keyrings/tailscale-archive-keyring.gpg >/dev/null c…

深入解析Linux文件重定向原理与dup2系统调用

在Linux中&#xff0c;重定向&#xff08;Redirection&#xff09;是一种强大的功能&#xff0c;允许用户控制命令的输入来源&#xff08;stdin&#xff09;和输出目标&#xff08;stdout和stderr&#xff09;。通过重定向&#xff0c;你可以将命令的输出保存到文件、从文件读取…

QGIS制作的仪表盘工程

在QGIS的官方资源库下载了一个QGIS制作的仪表盘工程&#xff0c;感觉非常炫酷&#xff01;分享给大家&#xff01;下面的仪表盘会将选中的道路数及长度&#xff0c;动态显示在相应的仪表项中&#xff01;下面的仪表盘会将选中的道路数及长度&#xff0c;动态显示在相应的仪表项…

Python高级数据类型:集合(Set)

集合是Python中一种非常有用的数据结构&#xff0c;它与列表类似但具有独特的特性。本文将全面介绍集合的所有知识点&#xff0c;从基础概念到高级用法&#xff0c;帮助初学者彻底掌握集合的使用。1. 集合简介1.1 什么是集合&#xff1f;集合&#xff08;Set&#xff09;是Pyth…

【Unity编辑器开发GUI.Window】

Unity GUI.Window 笔记 根据官方文档2021版本的&#xff0c;点击链接跳转记录 概述 GUI.Window 是 Unity IMGUI 系统中用于创建弹出窗口的核心方法&#xff0c;具有以下关键特性&#xff1a; 浮动窗口&#xff1a;浮于普通 GUI 控件之上焦点控制&#xff1a;可通过点击获得焦…

CAN通信驱动开发注意事项

以下是CAN通信驱动开发的关键注意事项相关的整理,涵盖硬件配置、协议实现、错误处理及性能优化等方面: 一、硬件层配置要点 引脚复用与时钟 确认MCU的CAN控制器引脚是否与GPIO复用,正确配置复用模式。 检查CAN控制器时钟源,确保波特率计算基准准确。 收发器(Transceiver)…

CCF编程能力等级认证GESP—C++8级—20250628

CCF编程能力等级认证GESP—C8级—20250628单选题&#xff08;每题 2 分&#xff0c;共 30 分&#xff09;判断题&#xff08;每题 2 分&#xff0c;共 20 分&#xff09;编程题 (每题 25 分&#xff0c;共 50 分)树上旅行遍历计数单选题&#xff08;每题 2 分&#xff0c;共 30…

135. Java 泛型 - 无界通配符

文章目录135. Java 泛型 - 无界通配符 (?)**1. 什么是无界通配符 (?)&#xff1f;****2. 为什么使用无界通配符&#xff1f;****3. 示例&#xff1a;使用 ? 处理任意列表****❌ 错误示例****✅ 正确示例****4. 为什么 List<Object> 和 List<?> 不一样&#xff…

NOIP提高组|2010T1机器翻译

NOIP2010年提高组第一题:机器翻译 题目描述 小晨的电脑上安装了一个机器翻译软件,他经常用这个软件来翻译英语文章。 这个翻译软件的原理很简单,它只是从头到尾,依次将每个英文单词用对应的中文含义来替换。对于每个英文单词,软件会先在内存中查找这个单词的中文含义,如果…

Change Data Capture (CDC) with Kafka Connect:实时数据同步的完整指南

Change Data Capture (CDC) 是一种高效的数据同步技术&#xff0c;能够捕获数据库的变更&#xff08;插入、更新、删除&#xff09;并实时传输到其他系统。结合 Kafka Connect&#xff0c;我们可以构建一个可靠、可扩展的 CDC 管道&#xff0c;实现数据库与数据湖、数据仓库或消…

云手机网络加速全攻略:解决游戏卡顿与APP连接失败困扰

用云手机玩游戏、挂脚本、跑自动任务&#xff0c;明明后台显示在线&#xff0c;但画面卡顿、操作延迟、甚至APP直接“转圈圈连不上”&#xff0c;是不是很抓狂&#xff1f;问题出在哪里&#xff1f;云手机不卡&#xff0c;网络卡&#xff1f;其实&#xff0c;大多数云手机的性能…

从“数字土著”到“数据公民”:K-12数据伦理课程的设计、实施与成效追踪研究

一、引言 1.1 研究背景与意义 在当今数字时代&#xff0c;信息技术以前所未有的速度渗透到社会的各个领域&#xff0c;深刻地改变了人们的生活、工作和学习方式。K-12 教育作为基础教育的关键阶段&#xff0c;也在数字化浪潮的推动下发生着巨大的变革。随着大数据、人工智能…

LVS详解

LVS(Linux virtual server)简介即linux虚拟服务器四层负载均衡基本上都会使用 LVS&#xff0c;据了解 BAT 等大厂都是 LVS 重度使用者&#xff0c;就是因为 LVS 非常出色的性能&#xff0c;能为公司节省巨大的成本。LVS&#xff0c;全称 Linux Virtual Server 是由国人章文嵩博…