-
問題
環境:springboot + restful + nginx + tomcat
@PostMapping(value = "/illegalOperation")
@ApiOperation(httpMethod = "POST", value = "用戶端webSocket中斷", produces = MediaType.APPLICATION_JSON_VALUE)
@ApiImplicitParams({
@ApiImplicitParam(name = "account",value = "坐席賬戶名",required = true,paramType = "query",dataType = "string"),
@ApiImplicitParam(name = "userPhone",value = "坐席登入分機号",required = true,paramType = "query",dataType = "string")
})
public VueReturn doIllegalOperation(String account,String userPhone){
logger.info("PhoneBarRecordController invoked doIllegalOperation with parameters: account={},userPhone={}",account,userPhone);
if (!StringUtils.isNotBlank(account) || !StringUtils.isNotBlank(userPhone)) {
return setFailResult(ConstantsUtils.STRING_ZERO, "坐席賬戶名和坐席分機号必須");
}
BaseUsers user = usersService.findUserByAccount(account);
if (null != user) {
PhoneBarRecord record = new PhoneBarRecord();
record.setUserId(user.getUserId());
record.setAccount(user.getAccount());
record.setUserPhone(userPhone);
record.setOpName(ConstantsUtils.PHONE_BAR_STATUS_NAME_LOGOUT);
record.setOpCode(ConstantsUtils.PHONE_BAR_STATUS_CODE_LOGOUT);
record.setRemark("PhoneBar provider invoked.");
String result = this.phoneBarRecordService.save(record);
if (result.equalsIgnoreCase(ConstantsUtils.STRING_ZERO)) {
logger.info("PhoneBarRecordController invoked doIllegalOperation with save success.");
return setFailResult(ConstantsUtils.STRING_ZERO,result);
}
return setSuccessResult(ConstantsUtils.STRING_ONE,"save success!");
}
return setFailResult(ConstantsUtils.STRING_ZERO, "使用者不存在");
}
測試:PostMan
采用: raw , application/json :
{
“account”:“111”,
“userPhone”:“222”
}
在背景接收資料全部為null
把環境 springboot + restful + nginx + tomcat
更換為 springboot + restful + tomcat 一切正常
一度懷疑是nginx 與 tomcat 請求存在轉換差異。
-
解決 :
采用 application/x-www-form-urlencoded ,一切正常。
-
分析
主要是@requestParam 和 @requestBody 差別
@requestParam 綁定單個請求資料,可以是URL中的資料,表單送出的資料或上傳的檔案;
@RequestBody,用來處理Content-Type不是application/x-www-form-urlencoded編碼的内容,例如application/json, application/xml等