@RequestBody的使用


  背景:后端接口入參比較多時會選擇使用對象去接收前端傳過來的json數據(使用@RequestBody注解),在使用過程中有遇到一些關於請求格式存在問題服務器響應不太友好的現象,特做優化記載。

  問題

  做開放服務時有用到@RequestBody以復雜對象接收前端傳過來的json數據,當前端傳遞給后端的json數據出現格式問題,返回的響應信息不友好,例如:

  后端對應的Controller:

  /**
     * 新建任務
     *
     * @param request
     * @return
     */
    @RequestMapping("addTaskInfo.do")
    @ResponseBody
    public Message<Object> addTaskInfo(@RequestBody TaskConfSaveParam param, HttpServletRequest request) {
        Message<Object> message = new Message<Object>();
        message.setData(JSON.toJSON(param));
        return message;
    }

 

  使用PostMan測試: 

 

  前端傳遞給后端的json數據:

       

 

 

  響應:

    

  優化:中心思想為 以String接收前端傳過來的json數據,然后將接收到json串做轉換,如果轉換出錯,則告訴用戶 “JSON入參格式錯誤”

  @RequestBody直接以String接收前端傳過來的json數據:

 

  后端對應的Controller:  

  /**
     * 新建任務
     *
     * @param request
     * @return
     */
    @RequestMapping("addTaskInfo.do")
    @ResponseBody
    public Message<Object> addTaskInfo(@RequestBody String paramStr, HttpServletRequest request) {
        Message<Object> message = new Message<Object>();

        Object paramJson = null;
        try {
            paramJson = JSONObject.parse(paramStr);
        } catch (JSONException e) {
            logger.error("error", e);
            message.setCode(FdataConstants.EXECUTE_FAILED_PARAMS_ERROR);
            message.setMsg("JSON入參格式錯誤:"+ExceptionUtils.getMessage(e));
            return message;
        }
        TaskConfSaveParam param = JSONObject.parseObject(paramStr, TaskConfSaveParam.class);

        message.setData(JSON.toJSON(param));
        return message;
    }

  

  使用PostMan測試: 

 

  前端傳遞給后端的json數據 & 響應:

  

   參考文檔:https://blog.csdn.net/justry_deng/article/details/80972817


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM