Spring MVC返回json數據給Android端

原先作Android項目時,服務端接口一直是別人寫的,本身拿來調用一下,但下個項目,接口也要本身搞定了,我想用Spring MVC框架來提供接口,這兩天便抽空淺學了一下該框架以及該框架如何返回json數據。在這裏邊介紹兩種我的以爲比較方便的兩種方法(PS:實際上是我如今只會這兩種)。html

 

1.直接PrintWriter輸出json數據java

使用該方法時,能夠本身拼湊json字符串,不過我並不贊同使用該方法,畢竟太容易出錯了。因此這裏我是先構建jsonobject對象,在將該對象打印出來。首先,咱們要導入一個最重要的jar包。android

json-lib-2.2.2-jdk15.jarweb

接下來咱們看代碼。spring

 

 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端的來測試一下,界面很簡單,代碼就不給出了。json

 

測試代碼以下mvc

 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之提交數據到服務端方法簡單封裝app

咱們來測試一下,輸入用戶名zhr,密碼123,能夠看到控制檯上打印出來了   直接 PrintWriter輸出json :zhr--->123 ,說明請求到了,同時手機端上也獲得返回的結果框架

測試成功。ide

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端不作任何修改,再次測試便可。

相關文章
相關標籤/搜索