1. 程式人生 > >springboot + restful + nginx + tomcat後臺接收不到post引數

springboot + restful + nginx + tomcat後臺接收不到post引數

  • 問題
    環境: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等