Spring MVC返回json数据给Android端

原先做Android项目时,服务端接口一直是别人写的,自己拿来调用一下,但下个项目,接口也要自己搞定了,我想用Spring MVC框架来提供接口,这两天便抽空浅学了一下该框架以及该框架如何返回json数据。在这里边介绍两种个人觉得比较方便的两种方法(PS:其实是我现在只会这两种)。

1.直接PrintWriter输出json数据

使用该方法时,可以自己拼凑json字符串,不过我并不赞同使用该方法,毕竟太容易出错了。所以这里我是先构建jsonobject对象,在将该对象打印出来。首先,我们要导入一个最重要的jar包。

json-lib-2.2.2-jdk15.jar

接下来我们看代码。

 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端的来测试一下,界面很简单,代码就不给出了。

测试代码如下

 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之提交数据到服务端方法简单封装

我们来测试一下,输入用户名zhr,密码123,可以看到控制台上打印出来了   直接 PrintWriter输出json :zhr--->123 ,说明请求到了,同时手机端上也得到返回的结果

测试成功。

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端不做任何修改,再次测试即可。

时间: 2024-10-13 12:52:00

Spring MVC返回json数据给Android端的相关文章

spring mvc 返回json数据的三种方式

一.返回ModelAndView,其中包含map集 /* * 返回ModelAndView类型的结果 * 检查用户名的合法性,如果用户已经存在,返回false,否则返回true(返回json数据,格式为{"valid",true}) */ @RequestMapping(value = "/checkNameExistsMethod2", produces = "application/json;charset=UTF-8") //这里的prod

Spring mvc返回JSON数据的两种配置方式

1.视图解析方式 依赖包:jackson-core.jackson-databind.jackson-annotationSpring配置文件内容: <bean id="contentNegotiationManager" class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> <property name="defaultContentTy

spring mvc 返回JSON数据

servlet相关XML配置 <!--这个不启用会报错--><mvc:annotation-driven /> <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter" > <property name="messageConverters"> <list> <bean cla

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

1.spring mvc返回json数据,只需要返回一个java bean对象就行,只要这个java bean 对象实现了序列化serializeable 2. @RequestMapping(value = { "/actor_details" }, method = { RequestMethod.POST }) @ResponseBody public ResultObject actorDetails(@RequestBody ActorDetailsRequest req)

spring mvc返回json字符串的方式

spring mvc返回json字符串的方式 方案一:使用@ResponseBody 注解返回响应体 直接将返回值序列化json            优点:不需要自己再处理 步骤一:在spring-servlet.xml文件中配置如下代码 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans&quo

关于 Spring MVC 返回 json 字符串

Spring MVC 返回 json 字符串的几种方式: 1.通过 @ResponseBody 注解自动将返回对象转为 json,这种方法需要 jackson-core.jar 等相关 jar 包支持,项目如果通过 maven 管理,直接在 maven 中加入依赖: ,这样在 maven 依赖中会新增完整的三个 jar 包: 2.在 spring-MVC 配置文件中进行默认视图配置: 3.借助其他 json 工具进行转换:比如可以使用 gson 来完成转换,当然这种方式也得需要 gson 的相关

Spring MVC3返回JSON数据中文乱码问题解决

Spring MVC3返回JSON数据中文乱码问题解决 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jackson JSON版本:2.1.3 解决思路:Controller的方法中直接通过response向网络流写入String类型的json数据. 使用 Jackson 的 ObjectMapper 将Java对象转换为String类型的JSON数据. 为了避免中文乱码,需要设置字符编码格式,例如:UTF

Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点

Spring MVC返回json视图时,如何将对象直接序列化成不带变量名做为根节点的 json 报文 问题 问题描述起来比较拗口,其实就是用Spring MVC时,如何将对象映射成 json 报文时不把对象作为json的根节点.即使用@ResponseBody的效果. 比如,默认情况下,使用ModelAndView的addObject(key,object)或者ModelMap的addAttribute(key,object)保存完Java对象,然后交给Srping的视图解析器解析成json时,

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

Spring MVC3返回JSON数据中文乱码问题解决 查了下网上的一些资料,感觉比较复杂,这里,我这几使用两种很简单的办法解决了中文乱码问题. Spring版本:3.2.2.RELEASE Jackson JSON版本:2.1.3 解决思路:Controller的方法中直接通过response向网络流写入String类型的json数据. 使用 Jackson 的 ObjectMapper 将Java对象转换为String类型的JSON数据. 为了避免中文乱码,需要设置字符编码格式,例如:UTF