springMVC的@ResponseBody、@RequestBody使用需要注意的地方

Gin.p發表於2015-08-01

springMVC我覺得比struts2好的其中一個原因就是可以使用註解解析json資料,方便快捷。但是,即使如此,還是有需要注意的地方。

1、返回的地方設定@ResponseBody,請求的物件引數@RequestBody,單個引數不用加@RequestBody;

  @RequestMapping(value="/validation")
    public @ResponseBody String validation(String username) throws Exception{
      return username; }

2、如果要返回的是一個物件,那麼直接返回,spring會自動轉為json資料。

 @RequestMapping(value="/validation")
    public @ResponseBody User validation(String username) throws Exception{
     User u = new User(username); return u; }

3、如果傳過來的是一個json字串,可以用物件封裝起來,使用@RequestBody會幫我們將json轉為對應的物件。

@RequestMapping(value="/validation")
public String validation(@RequestBody User user)throws Exception{         
    return "index"; }

 

注意:

1、單個引數的情況

a)、單個引數不要用@RequestBody,可以用@RequestParam。

錯誤的情況:GET:出現400引數不合法或POST:出現username=a,key和value一起傳到引數中

  @RequestMapping(value="/validation")
    public String validation(@RequestParam("name") String username) throws Exception{     
      return "index"; }

 b)、單個引數不要加'contentType' : 'application/json'。contentType: 'application/json', 這句去掉,這句是描述請求包內容格式的,你應該採用預設的application/x-www-form-urlencoded才能正確被伺服器解析。

錯誤的情況:使用@RequestParam出現400錯誤;使用@RequestBody出現key和value一起傳到引數中

 

 2、如果是@RequestBody整個物件的話,那麼就要加'contentType' : 'application/json'。不加的話,可能會出現406Not Acceptable

  $('#username').blur(function(){
        var postdata = '{"username":"' + $('#username').val() + '","password":"' + $('#password').val() + '"}';
                $.ajax({
                    url:"validation",
                    type:"post",
                    cache:false,
            contentType: 'application/json', data:postdata, dataType:'json', success:function(result){ } }); });

3、如果使用springMVC並使用ajax新增了 'contentType' : 'application/json'後,data必須為一個嚴格json字串,可以用JSON.stringify()轉換。

 

相關文章