Spring MVC返回json数据给Android端
原先做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端的更多相关文章
- spring mvc 返回json数据的四种方式
一.返回ModelAndView,其中包含map集 /* * 返回ModelAndView类型的结果 * 检查用户名的合法性,如果用户已经存在,返回false,否则返回true(返回json数据,格式 ...
- Spring MVC 返回json数据 报406错误 问题解决方案
将jackson jar包改为jackson-databind-2.5.0.jar jackson-core-2.5.0.jar jackson-annotations-2.5.0.jar(这个版 ...
- spring mvc 返回JSON数据
servlet相关XML配置 <!--这个不启用会报错--><mvc:annotation-driven /> <bean class="org.springf ...
- Spring MVC返回JSON数据
将一个对象以json数据格式返回前台: @ResponseBody public User login(User user) { return user; } 在控制器上使用@ResponseBod ...
- spring mvc返回json字符串数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable
1.spring mvc返回json数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable 2. @RequestMapping(val ...
- spring mvc返回json字符串的方式
spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json 优点:不需要自己再处理 步骤一:在spring- ...
- Spring Boot返回json数据及完美使用FastJson解析Json数据
Spring Boot返回json数据 视频地址:http://www.iqiyi.com/w_19rubxzsr5.html 博文参考:https://blog.csdn.net/linxingl ...
- 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 ...
- Spring MVC3返回JSON数据中文乱码问题解决(转)
Spring MVC3返回JSON数据中文乱码问题解决 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jack ...
随机推荐
- 【HDOJ】1422 重温世界杯
简单题. #include <stdio.h> #define MAXN 100005 int wi[MAXN], li[MAXN]; ]; int main() { int n, tot ...
- flat ui switch 改变状态而不响应事件
Flat UI是一套精美的扁平风格 UI 工具包,基于 Twitter Bootstrap实现.这套界面工具包含许多基本的和复杂的 UI 部件,例如按钮,输入框,组合按钮,复选框,单选按钮,标签,菜单 ...
- 进程创建函数fork()、vfork() ,以及excel()函数
一.进程的创建步骤以及创建函数的介绍 1.使用fork()或者vfork()函数创建新的进程 2.条用exec函数族修改创建的进程.使用fork()创建出来的进程是当前进程的完全复制,然而我们创建进程 ...
- Unity Chan Advanced
1. 8X MSAA 2. SMAA 3. ViewSpace Outline 4. Unity Chan Skin 5. Shift Toon Lighting 6. DOF 7. Bloom
- 一个Tomcat及一个ip,绑定不同的域名,各个域名访问各自不同应用程序的配置方法
http://nickandmiles.blog.163.com/blog/static/23422123201110151492166/ 条件是:这样一种实际情况是,就一台服务器,当公网的IP地址也 ...
- 开源存储之ceph
小记,曾经的很多单骑,赵子龙,杨再兴,..............为大将者所应用的胆识和气度,值得敬仰! 名师出高徒啊, 周侗北宋末年之武术大师,相传为三国姜维的传人(真实性ruiy哥就不考察了哈), ...
- Nodejs负载均衡:haproxy,slb以及node-slb - i5ting的个人空间 - 开源中国社区
Nodejs负载均衡:haproxy,slb以及node-slb - i5ting的个人空间 - 开源中国社区 undefined
- Selenium+Java+TestNG环境配置
1. JDK 2.eclipse+TestNG >TestNG安装. Name:testng Location:http://beust.com/eclipse.如图: 3.seleniu ...
- Linux命令 — 设置或查看网络配置命令ifconfig
ifconfig命令用于设置或查看网络配置,包括IP地址.网络掩码.广播地址等.它是linux系统中,使用频率最高的关于网络方面的命令. 1. 命令介绍 命令格式: ifconfig [interfa ...
- web项目学习之sitemesh
sitemesh主要有三个主要文件:sitemesh.xml,decorators.xml和做布局用的jsp页面. 一.sitemesh.xml 对于sitemesh.xml这个文件,官方文档上说它不 ...