@RequestBody物件為空,異常Required request body is missing的解決辦法
阿新 • • 發佈:2019-02-02
由於與前端互動的過程當中,都是用json資料與前端進行互動,這樣想取出整個傳送過來的json資料的時候,就需要用到@RequestBody這個註解,前端傳送資料的格式如下:
//測試傳送json資料
$("#id").click(function () {
$.ajax({
type: "post",
url: "test",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(getTestJson()),
dataType: "json",
success: function (data) {
alert(data);
},
error:function (XMLHttpRequest, textStatus, errorThrown) {
alert(XMLHttpRequest.status);
alert(XMLHttpRequest.readyState);
alert(textStatus);
}
});
function getTestJson() {
var Json = {
"a":"aaaaaaa",
"b":0,
"c":2,
};
return Json;
}
});
前臺的AJAX這樣去寫,這樣傳輸資料,那麼後臺就可以拿到完整的資料了,具體怎麼拿看如下程式碼:
@RequestMapping(value = "/test",method = RequestMethod.POST) @ResponseBody public String test(@RequestBody String requestJson){ if(requestJson==null||requestJson==""){ return ApiResponse.buildFailResponse(ResultConstant.OPERATOR_FAIL,"請求介面需要傳遞正確的JSON資料"); }
}
這樣,加上一個@RequestBody註解,就可以輕鬆的把請求過來的json資料全部拿到,然後就隨便你把json資料是轉成JSONObject還是普通的JAVA物件進行操作了。
但是,我們在傳輸json資料的時候,假如json資料為空,那麼就會報一個錯誤,就是Required request body is missing
這個的意思就是我們這個介面必須要傳輸json格式的資料,假如沒有資料,就會報錯返回錯誤的資訊。
但是,我們一般想做的樣子是我們由自己去判斷資料是否為空,假如為空,返回我們與前端約定格式的資料,那樣會
方便前端來進行除錯。
假如不想讓系統報錯,那麼就需要在@RequestBody增加一個Required屬性了,並且把該屬性設定為false,如下:
@RequestMapping(value = "/test",method = RequestMethod.POST)
@ResponseBody
public String test(@RequestBody(required = false) String requestJson){
if(requestJson==null||requestJson==""){
return ApiResponse.buildFailResponse(ResultConstant.OPERATOR_FAIL,"請求介面需要傳遞正確的JSON資料");
}
}