SpringBoot 參數傳遞以及@RequestBody注解


1.前台正確的js書寫格式是:

//點擊查詢, 執行下面這個函數
$("#searchByCriteria").click(function () {
     //var paramdata = $("#bck_qry_criteria_form").serializeJson();//serializeJson()是自定義的form 格式化為json函數
     var paramdata = {
         type:$("#bck_type").val(),
         title:$("#bck_title").val(),
         start:$("#bck_start").val(),
         end:$("#bck_end").val()
     };
     paramdata = JSON.stringify(paramdata);
     $.ajax({
         type: "post",
         data: paramdata,
         url: "/getNews",
         cache:false,
         headers : {"Content-Type" : "application/json;charset=utf-8"},
         success: function (data) {
             var code = data.code;
             var t = data.t;
             if (code == 200){alert(JSON.stringify("提交成功! 我們會盡快聯系您!"));}
             if (code == 500){alert(JSON.stringify(t));}

             //$("#input_phone").val("");//清空輸入框
         }
     })
 });

上面中傳遞的參數一定要用JSON.stringify(paramdata); 方法將參數轉換成json格式的字符串; 因為SpringBoot 中@RequestBody注解要求的必須是json格式的字符串才能注入參數, 請求中必須 帶上請求頭,不然會報下面錯誤 

org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported

 

2.后台正確的Controller書寫格式是:

其中consumes = “application/json”, 規范的講是要加的, 它規范了,前台要傳遞json格式的參數. 但是如果你不加也是可以的, 親測不加也能封裝到參數.NewsParamsMap中屬性

@PostMapping(value = "/getNews",  consumes = "application/json")
@ResponseBody
public PageInfo<NewsList> getNewsList(@RequestBody NewsParamsMap map){
    System.out.println("這是正確的用法");
    return null;
}

  

NewsParamsMap 中有Integer 有Date, 前台傳過來都是字符串, springboot,會根據名稱一一對應, 將數據轉換成相應的類型.

public class NewsParamsMap {
    private Integer type;
    private String title;
    private Date start;
    private Date end;
   ...
   set get 方法
   ...
}

 

 

 

 

 


免責聲明!

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



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