前后端传递和接受json数据

 

1. 使用Ajax默认格式来传递数据【推荐】

Ajax的默认格式为:application/x-www-form-urlencoded,相当于(username="admin"&password=123)来传递数据(这是GET请求的固定格式)

前端代码:

 
  1. 当Ajax以默认格式上传时,data数据直接使用JSON对象user,不用转换为JSON字符串(很方便)

  2. var user= {

  3. "username" : username,

  4. "password" : password,

  5. "rememberMe":rememberMe

  6. };

  7. $.ajax({

  8. url : "http://...../jsontest.do",

  9. type : "POST",

  10. async : true,

  11. data : user,

  12. dataType : 'json',

  13. success : function(data) {

  14. }

  15. });

后端使用@RequestParam注解或省略:

 
  1. 【推荐】

  2. //直接省略注解

  3. @RequestMapping("/jsontest.do")

  4. public void test(User user,String username,String password,Boolean rememberMe){

  5. System.out.println(user);

  6. System.out.println("username: " + username);

  7. System.out.println("password: " + password);

  8. System.out.println("rememberMe: " + rememberMe);

  9.  
  10. }

  11.  
  12. 【不推荐】

  13. //加上注解

  14. @RequestMapping("/jsontest.do")

  15. public void test(@RequestParam String username,

  16. @RequestParam String password,@RequestParam Boolean rememberMe,){

  17. System.out.println("username: " + username);

  18. System.out.println("password: " + password);

  19. System.out.println("rememberMe: " + rememberMe);

  20. }

优点: 
1.前端传递数据不用转换为json字符串:JSON.stringify(user) 
2.后端接受的参数很灵活,即可以封装为User对象,亦可以使用单个参数username,rememberMe,甚至User对象和单个rememberMe参数混合使用都可以

2. 使用application/json格式来传递数据

Content-Type使用application/json的时候,要将JSON对象转换为JSON字符串

前端代码:

 
  1. var user= {

  2. "username" : username,

  3. "password" : password

  4. };

  5. $.ajax({

  6. url : "http://...../jsontest.do",

  7. type : "POST",

  8. async : true,

  9. contentType: "application/json; charset=utf-8",

  10. data : JSON.stringify(user),

  11. dataType : 'json',

  12. success : function(data) {

  13. }

  14. });

后端必须使用@RequestBody 注解:

 
  1.  
  2. //这种方式下所有的参数都只能封装在User对象中,不能单独设置参数

  3. @RequestMapping("/jsontest")

  4. public void test(@RequestBody User user ){

  5. String username = user.getUsername();

  6. String password = user.getPassword();

  7. }

  8.  
  9. 或者

  10.  
  11. @RequestMapping("/jsontest")

  12. public void test(@RequestBody Map map ){

  13. String username = map.get("username").toString();

  14. String password = map.get("password").toString();

  15. }

  16.  
  17. 或者

  18.  
  19. public void test(@RequestBody String jsonData) {

  20. JSONObject jsonObject = JSON.parseObject(jsonData);

  21. String username= jsonObject.getString("username");

  22. String username= jsonObject.getString("password");

  23. }

缺点: 
1.前端需要使用JSON.stringify()将JSON对象转换为JSON字符串 
2.后端在接受参数的时候比较麻烦,没有第1种简单,也没有第一种灵活

  • 8
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值