使用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
英文地址,請注明出處:http://en.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 是由國人章文嵩博…