原先做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. Java cookie的使用

    1.cookie是什么? cookie是web应用当中非常常用的一种技术,用于储存某些特定的用户信息. 2.cookie的作用? 在用户登陆时将用户的信息存放在cookie中,用户在一定的时间中再次登 ...

  2. 关于memory 和 cache

    这篇文章介绍了cache的相关知识,包括全相关.组相关.缓存与置换策略.WriteThrough和WriteBack策略.cache体系.CPUID和缓存一致性.介绍了两种缓存一致性的协议:snoop ...

  3. 14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小

    14.7.2 Changing the Number or Size of InnoDB Redo Log Files 改变InnoDB Redo Log Files的数量和大小 改变 InnoDB ...

  4. 标量子查询优化(用group by 代替distinct)

    标量子查询优化 当使用另外一个SELECT 语句来产生结果中的一列的值的时候,这个查询必须只能返回一行一列的值.这种类型的子查询被称为标量子查询 在某些情况下可以进行优化以减少标量子查询的重复执行,但 ...

  5. wcf客户端捕获异常

    直接使用Exception进行捕获,然后在监视器中查看具体是哪一个异常 System.Exception {System.ServiceModel.Security.MessageSecurityEx ...

  6. 关于The APR based Apache Tomcat Native library警告

    今天在Eclipse上配置Tomcat7,启动时看到如下警告信息: The APR based Apache Tomcat Native library which allows optimal pe ...

  7. Linux下的各种软件安装方法汇总

    1 RPM包 1.1 安装 RPM包就像Windows的EXE安装文件一样,各种文件都已经编译好了,并进行了打包,哪一个文件应该放在哪一个目录下都指定好了,安装非常方便,在图形界面里你只需要双击就能自 ...

  8. HDOJ/HDU 1062 Text Reverse(字符串翻转~)

    Problem Description Ignatius likes to write words in reverse way. Given a single line of text which ...

  9. poj 3710 Christmas Game(树上的删边游戏)

    Christmas Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1967   Accepted: 613 Des ...

  10. myisam MySQL 锁问题

    2016-07-23  (点击上方公众号,可快速关注) 来源:阿里云 RDS - 数据库内核组 链接:http://mysql.taobao.org/monthly/2016/03/10/ 前言 最近 ...