在页面返回json字符串

在项目中需要写一个接口,返回json字符串,供别系统调用,返回格式如下:


 
 具体怎么实现呢,下面以代码与注释进行讲解如何实现的,我这里用两种方式,一是用处理response,第二种方法用spring自带的功能。

第一种实现方式:

首先要有个controller,当然我这里写的是一个很简单的实现,只是体现了实现原理,

@RequestMapping(value = "json/blog/{test}")
    public String blog(@PathVariable(value = "test") String test,
            HttpServletResponse response) {
        List<User> userList = new ArrayList<User>();
        User userOne = new User("jack","1001","60","25");
        User userTwo = new User("jackson","1002","80","20");
        userList.add(userOne);
        userList.add(userTwo);
        return ajaxJson(response, getJson(userList));
    }

 在上面这段代码中用到了getJson和ajaxJson方法,这是两个被封装了的方法。getJson(Object)就是很简单的将对象转换为json串,第二个是对reponse做一定的处理,getJson代码如下:

private static Gson gson = new GsonBuilder().enableComplexMapKeySerialization()
            .setDateFormat("yyyy-MM-dd HH:mm:ss").create();

    /**
     * 功能描述:根据Object输出JSON字符串
     */
    public String getJson(Object jsonObject) {
        return gson.toJson(jsonObject);
    }

 ajaxJson方法的代码如下:

public String ajaxJson(HttpServletResponse response,String jsonString) {
		return ajax(response,jsonString, "text/html");
}

public String ajax(HttpServletResponse response, String content, String type) {
		try {
			response.setContentType(type + ";charset=UTF-8");
			response.setHeader("Pragma", "No-cache");
			response.setHeader("Cache-Control", "no-cache");
			response.setDateHeader("Expires", 0);
			response.getWriter().write(content);
			response.getWriter().flush();
		} catch (IOException e) {
			log.error("IOException:", e);
		}
		return null;
	}
// 此方法为添加缓存,varnich缓存
public void setCache(HttpServletResponse response, String cacheTime) {
        long now = System.currentTimeMillis();
        long cacheTimeLong = Long.parseLong(cacheTime);
        response.setDateHeader("Expires", now + cacheTimeLong);
        response.setDateHeader("Last-Modified", now - (now % cacheTimeLong));
        response.setHeader("Cache-Control", "max-age=" + cacheTime+",s-maxage="+ cacheTime);
        response.setHeader("Pragma", "Pragma");
    }

第二种实现方式就很简单了,controller修改如下:

 

@RequestMapping(value = "json/blog/{test}")
    @ResponseBody
    public List<User> blog(@PathVariable(value = "test") String test,
            HttpServletResponse response) {
        List<User> userList = new ArrayList<User>();
        User userOne = new User("jack","1001","60","25");
        User userTwo = new User("jackson","1002","80","20");
        userList.add(userOne);
        userList.add(userTwo);
        return userList;
    }

 

一般在异步获取数据时使用,在使用@RequestMapping后,返回值通常解析为跳转路径,加上@responsebody后返回结果不会被解析为跳转路径,而是直接写入HTTP response body中。比如异步获取json数据,加上@responsebody后,会直接返回json数据看来spring够强大啊,记录下,不过如果用第二种方式的话,如何添加页面缓存和处理callback还有待研究,请大神指点一二!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值