歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Spring MVC返回json數據給Android端

Spring MVC返回json數據給Android端

日期:2017/3/1 9:16:03   编辑:Linux編程

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

1.直接PrintWriter輸出json數據

使用該方法時,可以自己拼湊json字符串,不過我並不贊同使用該方法,畢竟太容易出錯了。所以這裡我是先構建jsonobject對象,在將該對象打印出來。首先,我們要導入一個最重要的jar包。

json-lib-2.2.2-jdk15.jar

接下來我們看代碼。

package sedion.zhr.controller;

import java.io.PrintWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/test")
public class TestController
{
/**
* 直接 PrintWriter輸出json
* @param req
* @param rep
* @throws Exception
*/
@RequestMapping("/login")
public void getjson(HttpServletRequest req,HttpServletResponse rep) throws Exception
{
String username = req.getParameter("username");
String pass = req.getParameter("pass");

System.out.println(" 直接 PrintWriter輸出json :"+username +"--->" + pass);

PrintWriter writer = rep.getWriter();
JSONObject object = new JSONObject();
if(username.equals("zhr") && pass.equals("123"))
{
object.put("results", "login success");
}
else
{
object.put("results", "login fail");
}

writer.println(object.toString());
writer.flush();
writer.close();

}
}

服務端好了以後,我們簡單做個Android端的來測試一下,界面很簡單,代碼就不給出了。

測試代碼如下

package com.example.jsontest;

import org.json.JSONObject;
import webservice.Webservice;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity
{

private EditText edit_username,edit_pass;
private Button loginbtn;
private Handler handler;
private JSONObject object;

@SuppressLint("HandlerLeak")
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edit_username = (EditText)findViewById(R.id.username);
edit_pass = (EditText)findViewById(R.id.pass);
loginbtn = (Button)findViewById(R.id.login_btn);

handler = new Handler()
{
@Override
public void handleMessage(Message msg)
{
if(msg.what == 123)
Toast.makeText(getApplicationContext(), object.optString("results"), Toast.LENGTH_SHORT).show();;

}
};

loginbtn.setOnClickListener(new OnClickListener()
{

@Override
public void onClick(View arg0) {

new Thread(new Runnable()
{

@Override
public void run()
{
object = Webservice.login(edit_username.getText().toString(), edit_pass.getText().toString());
Message message = new Message();
message.what = 123;
handler.sendMessage(message);

}
}).start();

}
});


}
}

其中Webservice.login()方法是我自己封裝好的數據提交方法,具體細節可以看我的另一篇博客 Android之提交數據到服務端方法簡單封裝。

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

測試成功。

2.使用Spring內置的支持

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

<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<bean
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
</list>
</property>
</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端不做任何修改,再次測試即可。

Spring MVC+Spring3+Hibernate4開發環境搭建 http://www.linuxidc.com/Linux/2013-07/87119.htm

Spring MVC整合Freemarker基於注解方式 http://www.linuxidc.com/Linux/2013-02/79660.htm

基於注解的Spring MVC簡單介紹 http://www.linuxidc.com/Linux/2012-02/54896.htm

Spring MVC 框架搭建及詳解 http://www.linuxidc.com/Linux/2012-01/52740.htm

Spring MVC使用Cron表達式的定時器 http://www.linuxidc.com/Linux/2014-12/110733.htm

簡單的Spring MVC經典案例 http://www.linuxidc.com/Linux/2016-04/129718.htm

Copyright © Linux教程網 All Rights Reserved