天天看點

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等

繼續閱讀