亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

解決SpringMVC使用@RequestBody注解報(bào)400錯(cuò)誤的問題

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

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

首先要注意

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

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

比如有一個(gè)Date類型的字段

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

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

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

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

后臺(tái)的接受方法很簡(jiǎn)單

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

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

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

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

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

感覺有點(diǎn)麻煩,使用了新的思路

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

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

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

在Controller中可以使用@RequestBody注解拿到請(qǐng)求body,

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

校驗(yàn)通過(guò)的,獲取uri

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

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

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

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

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

解決了上面的問題可能會(huì)有請(qǐng)求兩次的問題,這是因?yàn)閷?quán)限校驗(yàn)跳轉(zhuǎn)到Controller層后需要

return false

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

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

在通過(guò)校驗(yàn)后,將獲取到RequestBody放到Request的Attribute中

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

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

相關(guān)文章

  • JAVA如何獲取jvm和操作系統(tǒng)相關(guān)信息

    JAVA如何獲取jvm和操作系統(tǒng)相關(guān)信息

    這篇文章主要介紹了JAVA獲取jvm和操作系統(tǒng)相關(guān)信息,使用Java自帶的類進(jìn)行獲取系統(tǒng)運(yùn)行的相關(guān)信息,在這整理記錄分享一下,需要的朋友可以參考下
    2022-10-10
  • 清理本地Maven倉(cāng)庫(kù)的方法示例

    清理本地Maven倉(cāng)庫(kù)的方法示例

    這篇文章主要介紹了清理本地Maven倉(cāng)庫(kù)的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • 都9102年了,你還用for循環(huán)操作集合嗎

    都9102年了,你還用for循環(huán)操作集合嗎

    這篇文章主要給大家介紹了關(guān)于java中for循環(huán)操作集合使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • netty中pipeline的handler添加刪除分析

    netty中pipeline的handler添加刪除分析

    這篇文章主要為大家介紹了netty中pipeline的handler添加刪除分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 利用Spring Cloud Config結(jié)合Bus實(shí)現(xiàn)分布式配置中心的步驟

    利用Spring Cloud Config結(jié)合Bus實(shí)現(xiàn)分布式配置中心的步驟

    這篇文章主要介紹了利用Spring Cloud Config結(jié)合Bus實(shí)現(xiàn)分布式配置中心的相關(guān)資料,文中通過(guò)示例代碼將實(shí)現(xiàn)的步驟一步步介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友下面來(lái)一起看看吧
    2018-05-05
  • springboot中使用redis的方法代碼詳解

    springboot中使用redis的方法代碼詳解

    ​redis 作為一個(gè)高性能的內(nèi)存數(shù)據(jù)庫(kù),如果不會(huì)用就太落伍了,之前在 node.js 中用過(guò) redis,本篇記錄如何將 redis 集成到 spring boot 中。感興趣的朋友跟隨小編一起看看吧
    2019-05-05
  • Mybatis批量修改聯(lián)合主鍵數(shù)據(jù)的兩種方法

    Mybatis批量修改聯(lián)合主鍵數(shù)據(jù)的兩種方法

    最近遇上需要批量修改有聯(lián)合主鍵的表數(shù)據(jù),找很多資料都不是太合適,最終自己摸索總結(jié)了兩種方式可以批量修改數(shù)據(jù),對(duì)Mybatis批量修改數(shù)據(jù)相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-04-04
  • Java內(nèi)部排序之插入排序與交換排序詳解

    Java內(nèi)部排序之插入排序與交換排序詳解

    這篇文章主要介紹了Java內(nèi)部排序之插入排序與交換排序詳解,排序是將任意序列重新排列按照關(guān)鍵字有序,排序根基存儲(chǔ)器的不同分為內(nèi)部排序、外部排序,排序根據(jù)關(guān)鍵字分為穩(wěn)定排序、不穩(wěn)定排序,需要的朋友可以參考下
    2023-12-12
  • 新手學(xué)習(xí)JQuery基本操作和使用案例解析

    新手學(xué)習(xí)JQuery基本操作和使用案例解析

    這篇文章主要介紹了新手學(xué)習(xí)JQuery基本操作和使用案例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • Java中關(guān)于字符串的編碼方式

    Java中關(guān)于字符串的編碼方式

    這篇文章主要介紹了Java中關(guān)于字符串的編碼方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評(píng)論