欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot排查和解決JSON解析錯誤(400 Bad Request)的方法

 更新時間:2025年06月12日 16:37:32   作者:碼農阿豪@新空間  
在開發(fā)Spring Boot RESTful API時,客戶端與服務端的數據交互通常使用JSON格式,然而,JSON解析錯誤(如400 Bad Request)是常見的開發(fā)問題之一,本文將通過一個實際案例,詳細分析如何排查和解決JSON解析錯誤,并總結最佳實踐,需要的朋友可以參考下

問題背景

1. 問題描述

開發(fā)者在調用本地Spring Boot接口時,遇到400 Bad Request錯誤:

curl --location 'http://localhost:8089/after/spider' \
--header 'Content-Type: application/json' \
--data '{
  "channelId": 100000132,
  "platformAccount": "yien",
  "platformPwd": "123456",
  "enName": "jinYiMu",
  "grabDays": 15,
  "aesPwd": "example"
}'

返回錯誤:

{
    "timestamp": "2025-06-12T03:04:50.459+00:00",
    "status": 400,
    "error": "Bad Request",
    "message": "JSON parse error: Unexpected character (' ' (code 160)): was expecting double-quote to start field name",
    "path": "/after/spider"
}

2. 錯誤分析

錯誤信息表明:

  • JSON解析失敗,原因是存在非法字符 ' ' (code 160)(即HTML的空格  )。
  • 根本問題:JSON請求體中混入了不可見的特殊字符,導致Jackson解析失敗。

解決方案

1. 手動重新輸入JSON

問題原因:JSON可能是從網頁、Word文檔或富文本編輯器復制的,導致包含隱藏字符。
解決方法:手動重新輸入JSON,避免復制粘貼:

{
  "channelId": 100000132,
  "platformAccount": "yien",
  "platformPwd": "123456",
  "enName": "jinYiMu",
  "grabDays": 15,
  "aesPwd": "example"
}

2. 使用工具清理JSON

推薦工具:

  • VS Code(安裝JSON格式化插件)
  • Notepad++(顯示所有字符)
  • 在線JSON校驗工具(如 JSONLint

示例:

// 格式化前(可能含隱藏字符)
{ "channelId": 100000132 }

// 格式化后(標準JSON)
{
  "channelId": 100000132
}

3. 檢查請求原始數據

使用 hexdump 或 xxd 查看請求體中的隱藏字符:

echo '{
  "channelId": 100000132
}' | hexdump -C

輸出示例:

00000000  7b 0a c2 a0 22 63 68 61  6e 6e 65 6c 49 64 22 3a  |{..."channelId":|

其中 c2 a0 是   的UTF-8編碼,說明存在非法字符。

4. 代碼層面過濾非法字符

如果問題持續(xù),可以在Java后端對輸入進行清理:

import org.springframework.util.StringUtils;

public class SpiderParam {
    private String enName;

    // 移除所有空白字符
    public void setEnName(String enName) {
        this.enName = enName.replaceAll("\\u00A0", ""); // 移除  
    }
}

深入排查:Spring Boot的JSON解析機制

1. Jackson庫的工作流程

Spring Boot默認使用 Jackson 解析JSON,流程如下:

  • 客戶端發(fā)送JSON請求。
  • DispatcherServlet 接收請求,交給 HttpMessageConverter 處理。
  • MappingJackson2HttpMessageConverter 使用 ObjectMapper 解析JSON。
  • 如果解析失敗,拋出 JsonParseException,返回400錯誤。

2. 關鍵日志配置

在 application.yml 中啟用詳細日志:

logging:
  level:
    org.springframework.web: DEBUG
    org.springframework.validation: DEBUG

server:
  error:
    include-binding-errors: always
    include-message: always

日志會顯示具體的解析錯誤,例如:

JSON parse error: Unexpected character (' ' (code 160))

3. 使用 @Valid 進行參數校驗

在Controller中添加 @Valid 注解,捕獲校驗錯誤:

@PostMapping("/spider")
public ResponseEntity<String> spider(@Valid @RequestBody SpiderParam spiderParam) {
    return ResponseEntity.ok("Success");
}

全局異常處理:

@RestControllerAdvice
public class GlobalExceptionHandler {
    @ExceptionHandler(MethodArgumentNotValidException.class)
    public ResponseEntity<String> handleValidationException(MethodArgumentNotValidException ex) {
        String errorMsg = ex.getBindingResult().getFieldErrors().stream()
                .map(error -> error.getField() + ": " + error.getDefaultMessage())
                .collect(Collectors.joining(", "));
        return ResponseEntity.badRequest().body(errorMsg);
    }
}

錯誤示例:

channelId: must not be null, platformAccount: must not be blank

最佳實踐

1. 如何避免JSON解析錯誤?

問題解決方案
非法空白字符手動輸入JSON,或用工具清理
字段名不匹配使用 @JsonProperty("en_name")
缺少必填字段添加 @NotNull 注解
類型不匹配確保JSON和Java類型一致

2. 推薦工具

工具用途
Postman測試API,生成標準JSON
VS Code格式化JSON,顯示隱藏字符
curl快速測試請求

總結

本文通過一個實際案例,詳細分析了Spring Boot中JSON解析錯誤的排查方法:

  • 問題定位:日志分析 + 錯誤信息解讀。
  • 解決方案:手動輸入JSON、工具清理、代碼過濾。
  • 深入機制:Jackson解析流程 + 參數校驗。
  • 最佳實踐:避免非法字符、使用校驗注解。

關鍵點:

  • 始終手動輸入JSON,避免復制粘貼。
  • 啟用詳細日志,快速定位問題。
  • 使用 @Valid 進行校驗,提高代碼健壯性。

到此這篇關于SpringBoot排查和解決JSON解析錯誤(400 Bad Request)的方法的文章就介紹到這了,更多相關SpringBoot JSON解析錯誤內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Spring Cloud Admin健康檢查 郵件、釘釘群通知的實現

    Spring Cloud Admin健康檢查 郵件、釘釘群通知的實現

    這篇文章主要介紹了Spring Cloud Admin健康檢查 郵件、釘釘群通知的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • IDEA中java: 找不到符號 符號: 變量log

    IDEA中java: 找不到符號 符號: 變量log

    這篇文章主要介紹了使用@Slf4j注解時出現log變量找不到符號問題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-06-06
  • Eureka源碼閱讀之環(huán)境搭建及工程結構

    Eureka源碼閱讀之環(huán)境搭建及工程結構

    這篇文章主要為大家介紹了Eureka源碼閱讀之環(huán)境搭建的工程結構及調試需知詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪<BR>
    2022-10-10
  • 使用SpringBoot整合Jpa的過程詳解

    使用SpringBoot整合Jpa的過程詳解

    SpringBoot是一種快速開發(fā)框架,它簡化了Java應用程序的開發(fā)過程,而Jpa是Java持久化規(guī)范的一種實現,將SpringBoot與Jpa整合可以更加方便地進行數據庫操作,提高開發(fā)效率,本文將介紹如何使用Spring Boot整合Jpa,幫助讀者快速上手并應用于實際項目中
    2023-12-12
  • 詳解Java中布隆過濾器(Bloom Filter)原理及其使用場景

    詳解Java中布隆過濾器(Bloom Filter)原理及其使用場景

    布隆過濾器是1970年由布隆提出的,它實際上是一個很長的二進制向量和一系列隨機映射函數,它的作用是檢索一個元素是否存在我們的集合之中,本文給大家詳細的講解一下布隆過濾器,感興趣的同學可以參考閱讀
    2023-05-05
  • 關于logBack配置日志文件及編碼配置的問題

    關于logBack配置日志文件及編碼配置的問題

    這篇文章主要介紹了logBack配置日志文件及編碼配置的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Json字符串與Object、List、Map的互轉工具類

    Json字符串與Object、List、Map的互轉工具類

    今天小編就為大家分享一篇關于Json字符串與Object、List、Map的互轉工具類,小編覺得內容挺不錯的,現在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • java讀取resources文件詳解及實現代碼

    java讀取resources文件詳解及實現代碼

    這篇文章主要介紹了java讀取resources文件詳解及實現代碼的相關資料,在開發(fā)項目的時候經常會遇到讀取文件夾里面的內容,需要的朋友可以參考下
    2017-07-07
  • Mybatis返回單個實體或者返回List的實現

    Mybatis返回單個實體或者返回List的實現

    這篇文章主要介紹了Mybatis返回單個實體或者返回List的實現,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • Spring sentinel哨兵模式相關原理解析

    Spring sentinel哨兵模式相關原理解析

    這篇文章主要介紹了Spring sentinel哨兵模式相關原理解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-11-11

最新評論