• Spring MVC返回json数据给Android端


    原先做Android项目时,服务端接口一直是别人写的,自己拿来调用一下,但下个项目,接口也要自己搞定了,我想用Spring MVC框架来提供接口,这两天便抽空浅学了一下该框架以及该框架如何返回json数据。在这里边介绍两种个人觉得比较方便的两种方法(PS:其实是我现在只会这两种)。

    1.直接PrintWriter输出json数据

    使用该方法时,可以自己拼凑json字符串,不过我并不赞同使用该方法,毕竟太容易出错了。所以这里我是先构建jsonobject对象,在将该对象打印出来。首先,我们要导入一个最重要的jar包。

    json-lib-2.2.2-jdk15.jar

    接下来我们看代码。

     1 package sedion.zhr.controller;
     2 
     3 import java.io.PrintWriter;
     4 
     5 import javax.servlet.http.HttpServletRequest;
     6 import javax.servlet.http.HttpServletResponse;
     7 
     8 import net.sf.json.JSONObject;
     9 
    10 import org.springframework.stereotype.Controller;
    11 import org.springframework.web.bind.annotation.RequestMapping;
    12 
    13 @Controller
    14 @RequestMapping("/test")
    15 public class TestController 
    16 {
    17 /**
    18      * 直接 PrintWriter输出json 
    19      * @param req
    20      * @param rep
    21      * @throws Exception
    22      */
    23     @RequestMapping("/login")
    24     public void getjson(HttpServletRequest req,HttpServletResponse rep) throws Exception
    25     {
    26         String username = req.getParameter("username");
    27         String pass = req.getParameter("pass");
    28         
    29         System.out.println(" 直接 PrintWriter输出json :"+username +"--->" + pass);
    30 
    31         PrintWriter writer = rep.getWriter();
    32         JSONObject object = new JSONObject();
    33         if(username.equals("zhr") && pass.equals("123"))
    34         {
    35             object.put("results", "login success");
    36         }
    37         else
    38         {
    39             object.put("results", "login fail");
    40         }        
    41         
    42         writer.println(object.toString());
    43         writer.flush();
    44         writer.close();
    45         
    46     }
    47 }

    服务端好了以后,我们简单做个Android端的来测试一下,界面很简单,代码就不给出了。

    测试代码如下

     1 package com.example.jsontest;
     2 
     3 import org.json.JSONObject;
     4 import webservice.Webservice;
     5 import android.annotation.SuppressLint;
     6 import android.app.Activity;
     7 import android.os.Bundle;
     8 import android.os.Handler;
     9 import android.os.Message;
    10 import android.view.Menu;
    11 import android.view.View;
    12 import android.view.View.OnClickListener;
    13 import android.widget.Button;
    14 import android.widget.EditText;
    15 import android.widget.Toast;
    16 
    17 public class MainActivity extends Activity 
    18 {
    19 
    20     private EditText edit_username,edit_pass;
    21     private Button loginbtn;
    22     private Handler handler;
    23     private JSONObject object;
    24     
    25     @SuppressLint("HandlerLeak")
    26     @Override
    27     protected void onCreate(Bundle savedInstanceState)
    28     {
    29         super.onCreate(savedInstanceState);
    30         setContentView(R.layout.activity_main);
    31         edit_username = (EditText)findViewById(R.id.username);
    32         edit_pass = (EditText)findViewById(R.id.pass);
    33         loginbtn = (Button)findViewById(R.id.login_btn);
    34         
    35         handler = new Handler()
    36         {
    37             @Override
    38             public void handleMessage(Message msg) 
    39             {
    40                 if(msg.what == 123)
    41                 Toast.makeText(getApplicationContext(), object.optString("results"), Toast.LENGTH_SHORT).show();;
    42 
    43             }
    44         };
    45         
    46         loginbtn.setOnClickListener(new OnClickListener()
    47         {
    48             
    49             @Override
    50             public void onClick(View arg0) {
    51                 
    52                 new Thread(new Runnable()
    53                 {
    54                     
    55                     @Override
    56                     public void run() 
    57                     {
    58                         object = Webservice.login(edit_username.getText().toString(), edit_pass.getText().toString());
    59                         Message message = new Message();
    60                         message.what = 123;
    61                         handler.sendMessage(message);
    62                         
    63                     }
    64                 }).start();
    65                 
    66             }
    67         });
    68         
    69         
    70     }
    71 }

    其中Webservice.login()方法是我自己封装好的数据提交方法,具体细节可以看我的另一篇博客   Android之提交数据到服务端方法简单封装

    我们来测试一下,输入用户名zhr,密码123,可以看到控制台上打印出来了   直接 PrintWriter输出json :zhr--->123 ,说明请求到了,同时手机端上也得到返回的结果

    测试成功。

    2.使用Spring内置的支持

    使用该方法先要在springmvc中添加如下配置

    1 <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
    2  <property name="messageConverters">
    3   <list>
    4    <bean
    5     class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
    6   </list>
    7  </property>
    8 </bean>

    随后引入两个jar包。jackson-mapper-asl-1.8.5.jar和jackson-core-asl-1.8.5.jar。

    再将服务端代码改为

    /**
         * 使用Spring内置的支持
         * @param req
         * @param rep
         * @throws Exception
         */
        @RequestMapping("/login")
        @ResponseBody
        public Map<String, String> getjson(HttpServletRequest req,HttpServletResponse rep) throws Exception
        {
            String username = req.getParameter("username");
            String pass = req.getParameter("pass");
            
            System.out.println("使用Spring内置的支持:"+username +"--->" + pass);
    
            Map<String, String> map = new HashMap<String, String>();
            if(username.equals("zhr") && pass.equals("123"))
            {
                map.put("results", "login success");
            }
            else
            {
                map.put("results", "login fail");
            }        
            
            
            return map;
            

    记得加上 @ResponseBody,这样便支持返回复杂对象,Android端不做任何修改,再次测试即可。

  • 相关阅读:
    Redis 安全
    基于Twemproxy的Redis集群方案(转载)
    Mongodb数据模型
    关于LRU算法(转载)
    基于Redis实现分布式锁(转载)
    Redis持久化(转载)
    redis 内存管理与数据淘汰机制(转载)
    redis事务(转载)
    redis发布与订阅
    redis的数据类型和基本操作
  • 原文地址:https://www.cnblogs.com/zhrxidian/p/4128274.html
Copyright © 2020-2023  润新知