1. 程式人生 > >restful:獲取引數方式,及restcontroller與controller

restful:獲取引數方式,及restcontroller與controller

restful風格

簡單的理解,restful是一種url風格,或者說是規範,在以前的網址中,假定一個業務,取得資料網址為http://test/get ,新增資訊的網址為http://test/post ,類似這樣。

但是在restful風格中,取得資料和新增資料的網址均應為http://test ,方法為get或者post;所以,在restful風格中,一個網址就是一個資源,其形式類似於http://xxx.com/xx/{id}/{id} ,例如某購物網站,產品有很多種類,每種產品下有很多子型別,那麼http://shop.com/laptop/lenovo/1103 代表了聯想1103型號電腦,而http://shop.com/laptop/hp/1024

代表了2014型號電腦。

在spring mvc中,有@requestparm, @requestbody和@pathvariable 三種註解來獲得瀏覽器端的引數,其中@requestparm是取自url中“?”之後的a=b&c=d,@requestbody 來自於請求體,而@pathvariable 則是從網址中取得引數;

感謝評論區@comeoon的訂正,瀏覽器的get/put/delete/post方法都可以使用上述引數,但是由於瀏覽器get方法不能提供body,所以RequestBody實際獲取的是一個map,引數來自於url中“?”之後的引數(實際上是request parameters)

假設程式碼如下:

@Requestmapping(value="/{category}/{brand}/{id},method=RequestMethod.POST)
public void getbyid(@PathVariable("category") String category
                    @PathVariable("brand") String brand
                    @PathVariable("id") String id){
                    //具體程式碼略
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在上述程式碼中,訪問

http://shop.com/laptop/hp/1024 網址時,則,category為“laptop”,brand為”hp”,id為”1024”; 所以說,在restful風格中,一個網址即表示了一個資源。

restcontroller與controller

假定一個user物件,物件有很多屬性(name,sex,age,birth,address,tel)
在我的瞭解中,這二者的區分為:@restcontroller為@controller和@responsebody的結合

在@controller註解中,返回的是字串,或者是字串匹配的模板名稱,即直接渲染檢視,與html頁面配合使用的,在這種情況下,前後端的配合要求比較高,java後端的程式碼要結合html的情況進行渲染,使用model物件(或者modelandview)將user的屬性渲染到頁面;

java示例程式碼如下:

@Controller
@RequestMapping(method = RequestMethod.GET, value = "/")
    public String getuser(Model model) throws IOException {

        model.addAttribute("name",bob);
        model.addAttribute("sex",boy);
        return "user";
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

對應的html程式碼:

<htmlxmlns:th="http://www.thymeleaf.org">
<body>
    <div>
        <p>"${name}"</p>
        <p>"${sex}"</p>
    </div>
</body>
</html>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

而在@restcontroller中,返回的應該是一個物件,即return一個user物件,這時,在沒有頁面的情況下,也能看到返回的是一個user物件對應的json字串,而前端的作用是利用返回的json進行解析渲染頁面,java後端的程式碼比較自由。
java端程式碼:

@RestController
@RequestMapping(method = RequestMethod.GET, value = "/")
    public User getuser( ) throws IOException {
        User bob=new User();
        bob.setName("bob");
        bob.setSex("boy");
        return bob;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

訪問網址得到的是json字串{“name”:”bob”,”sex”:”boy”},前端頁面只需要處理這個字串即可。