天天看點

springMVC @ResponseBody接收前端Json字元串

使用SpringMVC與前端頁面表單資料互動時,有兩種方式(自己試的,如果還有其他,還望指出)

一種是:直接直接表單送出 $("#myform").submit();

這種方式的送出,背景接收可以是Bean對象、或者直接屬性名、或者request.getParameter("");

比如:僞代碼

<form action="login" id="myform">

  name: <input type="text" name="username" /> <br />

 password:<input type="password" name="password" /> <br>

<input type = "button" value="送出"  οnclick="doLogin()" />

</form>

Js

<script>

  function doLogin() {

      $("#myform").submit();

 }

</script>

背景接收

 1、 @RequestMapping("/login")

     public String doLogin(String username, String password) {

     }

   如果表單元素name和方法裡面的變量不一緻,可以使用@RequestParam("username") String username

2、@RequestMapping("/login")

     public String doLogin(LoginUser loginUser) {

     }

可以自動将表單元素封裝到對應bean

3、可以使用HttpServletRequest擷取

     @RequestMapping("/login")

     public String doLogin(HttpServletRequest request) {

          String username = request.getParameter("username");

     }

第二種送出:Ajax post送出

<script>

    function doLogin() {

         $.ajax({

            url:'<%=request.getContentPath%>/login',

           type:'post',

         data:$("#myform").serialize(),

          success:function(data) {

          },

         error:function() {

          }

      });

   }

</script>

如果ajax這樣送出,背景接收,上面三種方式同樣适用

但如果我們要使用@RequestBody方式接收的話,由于其隻能接收一個Json的字元串,是以我們要在送出的時候把表單資料轉換成json字元串

目前沒有js支援自動轉換,需要我們手動去

var d = {};

var t = $('#loginform').serializeArray();

$.each(t, function() {

   d[this.name] = this.value;

});

var data = JSON.stringify(d);

這樣data就是json格式 {username:'1', password:'2'},同時切記在送出的js裡面要加上

contentType:'application/json;charset=UTF-8'

data:JSON.stringify(d);  // 上面那段轉換

背景就可以使用@RequestBody

@RequestMapping("/login")

     public String doLogin(@RequestBody LoginUser loginUser) {

     }