原先做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返回json数据给Android端的更多相关文章

  1. spring mvc 返回json数据的四种方式

    一.返回ModelAndView,其中包含map集 /* * 返回ModelAndView类型的结果 * 检查用户名的合法性,如果用户已经存在,返回false,否则返回true(返回json数据,格式 ...

  2. Spring MVC 返回json数据 报406错误 问题解决方案

    将jackson jar包改为jackson-databind-2.5.0.jar  jackson-core-2.5.0.jar  jackson-annotations-2.5.0.jar(这个版 ...

  3. spring mvc 返回JSON数据

    servlet相关XML配置 <!--这个不启用会报错--><mvc:annotation-driven /> <bean class="org.springf ...

  4. Spring MVC返回JSON数据

    将一个对象以json数据格式返回前台: @ResponseBody public  User login(User user) { return user; } 在控制器上使用@ResponseBod ...

  5. spring mvc返回json字符串数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable

    1.spring mvc返回json数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable 2. @RequestMapping(val ...

  6. spring mvc返回json字符串的方式

    spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring- ...

  7. Spring Boot返回json数据及完美使用FastJson解析Json数据

     Spring Boot返回json数据 视频地址:http://www.iqiyi.com/w_19rubxzsr5.html 博文参考:https://blog.csdn.net/linxingl ...

  8. ajax使用向Spring MVC发送JSON数据出现 org.springframework.web.HttpMediaTypeNotSupportedException: Content type 'application/x-www-form-urlencoded;charset=UTF-8' not supported错误

    ajax使用向Spring MVC发送JSON数据时,后端Controller在接受JSON数据时报org.springframework.web.HttpMediaTypeNotSupportedE ...

  9. Spring MVC3返回JSON数据中文乱码问题解决(转)

    Spring MVC3返回JSON数据中文乱码问题解决 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jack ...

随机推荐

  1. Condition 的使用

    Condition 将 Object 监视器方法(wait.notify 和 notifyAll)分解成截然不同的对象,以便通过将这些对象与任意 Lock 实现组合使用,为每个对象提供多个等待 set ...

  2. 在非UI线程中更改UI(Delphi使用隐藏窗口来处理,QT使用信号槽)

    在Delphi里我记得是使用TThread.Synchronize(TThreadMethod),原理是利用了一个隐藏窗口来处理. 在QT Debug模式一下,碰到了同样的问题,显示错误: canno ...

  3. Android开发者必知的开发资源

    推荐书籍 我推荐下面两本书: The Busy Coder’s Guide to Android Development <The Busy Coder’s Guide to Android D ...

  4. android.graphics.Matrix

    Matrix类包含了一个3x3的矩阵用来改变坐标,它没有一个构造器来初始化它里边的内容,所以创建实例后需要调用reset()方法生成一个标准matrix,或者调用set..一类的函数,比如setTra ...

  5. WordPress /wp-admin/includes/post.php user_ID 参数操作权限提升漏洞

    漏洞版本: WordPress 3.6 漏洞描述: Bugtraq ID:62346 CVE ID:CVE-2013-4340 WordPress是一种使用PHP语言开发的博客平台,用户可以在支持PH ...

  6. PHP_SELF、 SCRIPT_NAME、 REQUEST_URI 区别

    $_SERVER[PHP_SELF], $_SERVER[SCRIPT_NAME], $_SERVER['REQUEST_URI'] 在用法上是非常相似的,他们返回的都是与当前正在使用的页面地址有关的 ...

  7. Python切割nginx日志_小组_ThinkSAAS

    Python切割nginx日志_小组_ThinkSAAS Python切割nginx日志

  8. hdoj 1950 Bridging signals【二分求最大上升子序列长度】【LIS】

    Bridging signals Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  9. Linux内核之mmc子系统-sdio

    现在的Linux内核中,mmc不仅是一个驱动,而是一个子系统.这里通过分析Linux3.2.0内核,结合TI的arm335x平台及omap_hsmmcd host分析下mmc子系统,重点关注sdio及 ...

  10. android 21 隐式意图启动系统预定义activity

    Intent intent=new Intent(LoginActivity.this, MainActivity.class);//显示意图启动,显示从一个activity到另一个activity, ...