最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決SpringMVC使用@RequestBody注解報400錯誤的問題

 更新時間:2020年09月28日 09:46:57   作者:Freefish1994  
這篇文章主要介紹了解決SpringMVC使用@RequestBody注解報400錯誤的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

一般使用@RequestBody接收的時候報400都是傳入的json字符串和對應(yīng)封裝的對象不對應(yīng)造成的

首先要注意

封裝的對象中的字段類型有沒有Date類型或者int等類型的,如果有的話,在set方法中統(tǒng)一將傳入的參數(shù)要調(diào)整為String類型

在set方法中進行參數(shù)的轉(zhuǎn)換

比如有一個Date類型的字段

 private Date startTime;
 
 public Date getStartTime() {
 return startTime;
 }
 public void setStartTime(String startTime) {
 // 這里根據(jù)你的時間格式選擇
 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
 try {
  this.startTime = dateFormat.parse(startTime);
 } catch (ParseException e) {
  this.startTime = null;
 }
 }

這樣寫就可以了,不要將形參的類型寫成Date類型,所以這里建議對實體類構(gòu)建一個DTO,使用DTO進行封裝

前臺的ajax發(fā)送如下:

$.ajax({
 type : "POST",
 contentType : "application/json",
 url : xxxxx,// 請求路徑
 data : JSON.stringify(data),// 將data的JSON對象轉(zhuǎn)換為字符串{name:'value'}的格式
 success : function(msg) {
 },
 error : function() {
 }
});

后臺的接受方法很簡單

 @RequestMapping(value = "XXXXX.do", method = RequestMethod.POST)
 @ResponseBody
 public String saveInstCorNotice(@RequestBody EntityDTO entityDTO) {
 
 }

以前總被坑,這里記錄一下!

補充知識:SpringMVC在攔截器中做權(quán)限控制,解決RequestBody獲取問題

做接口的權(quán)限控制,接口請求結(jié)構(gòu)是JSON串,比較為難的是@RequestBody的獲取

網(wǎng)上的資料是先手動讀出來,再使用自定義的封裝將JSON串寫回去

感覺有點麻煩,使用了新的思路

在攔截器中,攔截需要做權(quán)限驗證的請求,使用下面的方式,將權(quán)限校驗跳轉(zhuǎn)到Controller層中做

String uri = request.getRequestURI();
request.setAttribute("referenceUrl", uri);
request.getRequestDispatcher(checkerUrl).forward(request, response);

url是用來校驗權(quán)限的Controller路徑

在Controller中可以使用@RequestBody注解拿到請求body,

之后可以使用獲取到的body信息校驗權(quán)限,

校驗通過的,獲取uri

再次通過如下方式,跳轉(zhuǎn)到真正要請求的Controller層

request.getRequestDispatcher(uri).forward(request, response);

注意,這里會有攔截器死循環(huán)的問題,當(dāng)然 因為@RequestBody只能讀一次的特性,在第二次被攔截器攔截時就會因為請求Body為空拋異常。再當(dāng)然 如果你不幸的設(shè)置了@RequestBody注解required屬性為false,即允許為空 那么就真的陷入無限循環(huán)了

所以,這里我們要給request加一個標(biāo)志,表明經(jīng)過了該過濾器,一旦標(biāo)志不為空則直接返回true 允許請求通過

if (null != flag) {
 return true;
}
/*
 *我想你不會將上面的代碼寫到攔截器后面的對吧
 *
 *一定要將上面的代碼加到攔截器一開始的地方
 *也不要忘記 后續(xù)設(shè)置標(biāo)志位的代碼
*/

解決了上面的問題可能會有請求兩次的問題,這是因為將權(quán)限校驗跳轉(zhuǎn)到Controller層后需要

return false

否則你會發(fā)現(xiàn)請求執(zhí)行了兩次,并且在第二次拋異常:writer已經(jīng)調(diào)用過

當(dāng)然,這里還有一個問題,那就是權(quán)限校驗的Controller層已經(jīng)讀取了RequestBody,那么 真正的業(yè)務(wù)邏輯Controller層怎么獲取呢?

在通過校驗后,將獲取到RequestBody放到Request的Attribute中

在業(yè)務(wù)邏輯Controller層使用@RequestAttribute注解獲取

以上這篇解決SpringMVC使用@RequestBody注解報400錯誤的問題就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • log4j2的異步使用及添加自定義參數(shù)方式

    log4j2的異步使用及添加自定義參數(shù)方式

    這篇文章主要介紹了log4j2的異步使用及添加自定義參數(shù)方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Springboot項目如何使用apollo配置中心

    Springboot項目如何使用apollo配置中心

    這篇文章主要介紹了Springboot項目如何使用apollo配置中心,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-11-11
  • Java中Map的用法詳解

    Java中Map的用法詳解

    將鍵映射到值的對象。一個映射不能包含重復(fù)的鍵;每個鍵最多只能映射到一個值。此接口取代 Dictionary 類,后者完全是一個抽象類,而不是一個接口
    2016-05-05
  • Java生成pdf文件或jpg圖片的案例講解

    Java生成pdf文件或jpg圖片的案例講解

    這篇文章主要介紹了Java生成pdf文件或jpg圖片的案例講解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Java ResultSet案例講解

    Java ResultSet案例講解

    這篇文章主要介紹了Java ResultSet案例講解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • mybatis批量插入時,有字段可能為null會報錯問題

    mybatis批量插入時,有字段可能為null會報錯問題

    這篇文章主要介紹了mybatis批量插入時,有字段可能為null會報錯問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • springboot配置aop切面日志打印過程解析

    springboot配置aop切面日志打印過程解析

    這篇文章主要介紹了springboot配置aop切面日志打印過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01
  • Java命令設(shè)計模式詳解

    Java命令設(shè)計模式詳解

    這篇文章主要為大家詳細介紹了Java命令設(shè)計模式,對命令設(shè)計模式進行分析理解,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 在Spring Boot中從類路徑加載文件的示例

    在Spring Boot中從類路徑加載文件的示例

    創(chuàng)建Spring Boot Web應(yīng)用程序時,有時有時需要從類路徑中加載文件;war和jar的加載文件格式是不一樣的,在下面,您將找到在WAR和JAR中加載文件的解決方案。
    2020-10-10
  • 簡單了解Java的默認(rèn)和靜態(tài)方法

    簡單了解Java的默認(rèn)和靜態(tài)方法

    這篇文章主要介紹了簡單了解Java的默認(rèn)和靜態(tài)方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-01-01

最新評論

郧西县| 苍南县| 海阳市| 海盐县| 色达县| 清丰县| 万荣县| 陆河县| 龙南县| 饶河县| 金坛市| 乐昌市| 漳平市| 堆龙德庆县| 和硕县| 来宾市| 郓城县| 宣汉县| 东源县| 财经| 武功县| 厦门市| 平安县| 綦江县| 临桂县| 洮南市| 永丰县| 五大连池市| 卢湾区| 策勒县| 岳西县| 镇康县| 安徽省| 漠河县| 托克逊县| 舞阳县| 潼南县| 林甸县| 济阳县| 壶关县| 惠水县|