@RequestBody注解用法


  做Java已經有8個多月了,但是基本沒有學習過Java語言,因此在項目中寫代碼基本靠的是其他語言的基礎來寫Java代碼,寫出來的很多代碼雖然能用,但是感覺很不地道,雖然從來沒有同事說過,但是我自己覺得是,因為我經常用下中國象棋的套路去下國際象棋。

 

  在手頭的項目用的SSM的框架,其中有用到Ajax的地方不少,方法是再簡單不過了,在Ajax中對指定的URL提交參數,然后在Controller里通過request.getParameter()方法來接收參數。代碼差不多就像下面的結構,Ajax的代碼如下:

 1 function addRoomPic() {
 2    var housingPic = document.getElementById("housingPic").value;
 3    var remarks1    = document.getElementById("remarks1").value;
 4    
 5    if ( remarks1 == '' ) {
 6        return ;
 7    }
 8    
 9    document.getElementById("housingPic").value = "";
10    document.getElementById("remarks1").value    = "";
11    
12    $.post(
13        "${ctx}/housingresource/housingPics/ajaxSave",
14        {housingPic: housingPic, remarks:remarks1},
15        function (result) {
16            // ...
17        }
18    );
19 }

  Controller中代碼如下:

1 @RequestMapping(value = "ajaxSave")
2 @ResponseBody
3 public HousingPics ajaxSave(HttpServletRequest request) {
4     HousingPics hrp = new HousingPics();
5     hrp.setHousingPic(request.getParameter("housingPic"));
6     hrp.setRemarks(request.getParameter("remarks"));
7 
8     // ....
9 }

 

  這樣的做法沒有錯,看着也比較直觀,對於我這個用其他語言討論來寫Java代碼的人來說,這樣已經很好了。難道還有更好的方法嗎?事實證明,無知會自大。

  在Spring中有一個注解可以方便的獲取以Json形式提交的參數,並且可以把各個參數直接...直接...直接設置到一個對象中(猶豫的表達出自己不一定正確的用於),這個注解就是該文章標題中的@RequestBody了。修改項目中的代碼,修改后的Controller如下:

1 @RequestMapping(value = "ajaxSave")
2 @ResponseBody
3 public HousingPics ajaxSave(@RequestBody HousingPics hrp) {
4     // ...
5 }

  在此處,傳遞的兩個參數已經被@RequestBody注解直接設置到對象中了,方法中實例化對象,接收參數的過程就免掉了。

  修改完Controller以后,直接進行測試,發現並沒有得到預期的效果,那么在修改后的方法中下斷。再次測試,但是竟然沒有被斷下,那么就在瀏覽器中進行調試,調試發現提示415報錯,提示類似如下:

Unsupported Media Type 415

 

  該問題因為傳輸的數據格式不太對,那么就修改Ajax請求的方式,代碼如下:

 1 function addRoomPic() {
 2    var housingPic  = document.getElementById("housingPic").value;
 3    var remarks1    = document.getElementById("remarks1").value;
 4    
 5    if ( remarks1 == '' ) {
 6        return ;
 7    }
 8    
 9    document.getElementById("housingPic").value = "";
10    document.getElementById("remarks1").value    = "";
11    
12    $.ajax({
13        url:"${ctx}/housingresource/housingPics/ajaxSave",
14        dataType:"json", 15        contentType:"application/json", 16        type:"post",
17  data:JSON.stringify({housingPic: housingPic, remarks:remarks1}), 18        success:function(result) {
19            // ...
20        }});
21 }

  在代碼中,另外增加了dataType和contentType兩個Http的標識,對data數據進行了json格式的轉換。修改后再次測試,這次OK了。

 

  相對的,在接收Json格式后需要設置入對象中使用@RequestBody注解,如果要將返回的對象轉換為Json格式,需要使用@ResponseBody注解即可。

 


 

我的微信公眾號:“碼農UP2U”

 


免責聲明!

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



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