`
invincibleLiu
  • 浏览: 13023 次
  • 性别: Icon_minigender_1
  • 来自: 加泰罗尼亚
社区版块
存档分类
最新评论

SpringMVC 3.0下搞JSON——为了忘却的纪念

阅读更多
  先介绍一下业务需求:在浏览器输入localhost:8888/MicroBlog/test.json,要求服务器返回{"id":"1","name":"messi"}字符串,以供javascript回调函数处理。
  MVC:M代表的是依赖的业务逻辑组件,功能就是如何获得上述json字符串,V代表视图资源,在这里就是上述字符串,C的功能是怎样解析"localhost:8888/MicroBlog/test.json"这个请求字符串.
  Spring的注解驱动功能可以将普通的java对象转化为Controller类
package com.microblog.web;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
 * Controller类
 * @author 晔
 *
 */
@Controller
public class TestController {
	@RequestMapping(value="/test.json",method=RequestMethod.GET)
	public String getUsers(@PathVariable("namePrefix") String prefix, Model model) {		
		model.addAttribute("json", "[{'id':'1','name':'messi'},{'id':'2','name':'pedro'}]");
			System.out.println("hello 你好周杰伦");
			return "jsonView";
	}
}

注解加上去了还不够,这是我在百度上看到的绝大部分情形,想要框架捕获这些注解还要这一手
<context:component-scan base-package="**/web/**" />

  这时候我们要来做Viewer了,很多搞JSON的看到springsource上推荐的那个MappingJacksonJsonView类和超长的英文解释后直接晕了———跟我一样,其实完全没必要,请静静的思考一下,我们要的json是什么?还不是字符串,只不过改了个潮点的名字而已,只要能获得HttpServletResponse对象一切OK
package com.microblog.web;

import java.io.PrintWriter;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.view.AbstractView;

/**
 * Viewer类
 * @author 晔
 *
 */
public class TestView extends AbstractView{
	protected void renderMergedOutputModel(Map<String, Object> model,
			HttpServletRequest request, HttpServletResponse response)
			throws Exception {
		PrintWriter out=response.getWriter();
		out.println((String)model.get("json"));//json字符串从这里走向世界
	}
}

剩下的就简单了,配置TestController产生的视图名字jsonView由对应的视图类TestView处理
 <bean id="test" class="com.microblog.web.TestController"/>
    
	<bean class="org.springframework.web.servlet.view.BeanNameViewResolver">
		<property name="order" value="1" />
	</bean>
	<bean id="jsonView" class="com.microblog.web.TestView" />

后记:本来我不想写这篇文章的,有注释完全可以记下我所学到的东西,但是解决这次的问题我访问了大量的关于Spring3.0介绍的英文论坛,发现早在09年的时候国外就对3.0有了成熟的应用了,而我今天才掌握一点皮毛,想起两年前的巴萨是何等的辉煌,而过去一周的巴萨却判若两人,被皇马戏弄于鼓掌,怀古而伤今,由感而发,写下此文,与此时此刻与我有同样心情的同志共勉!
分享到:
评论
23 楼 rocketball 2011-04-23  
invincibleLiu 写道
rocketball 写道
http://liukai.iteye.com/blog/975103
看下这篇文章吧,可以全部采用标注的形式

不行啊,jdbc查询返回的是List(里面的元素是String[])框架无法序列化,来了个406错误

少jackson吧,我也遇到过这个问题
22 楼 invincibleLiu 2011-04-23  
hjg1988 写道
@ResponseBody就可以了。String[]怎么可能无法序列化,可能是其它原因造成的吧。
Spring官网上有专门的例子的,有一个视频教程可以下载,一看就明白了,很不错。

搞定了,卧槽!没有重部署myeclipse里虽然导入了jackson但是tomcat没有及时更新,这下可以享受jackson的高效率了~
21 楼 hjg1988 2011-04-22  
@ResponseBody就可以了。String[]怎么可能无法序列化,可能是其它原因造成的吧。
Spring官网上有专门的例子的,有一个视频教程可以下载,一看就明白了,很不错。
20 楼 invincibleLiu 2011-04-22  
rocketball 写道
http://liukai.iteye.com/blog/975103
看下这篇文章吧,可以全部采用标注的形式

不行啊,jdbc查询返回的是List(里面的元素是String[])框架无法序列化,来了个406错误
19 楼 invincibleLiu 2011-04-22  
kjj 写道
引用

注解要强制框架去捕获的,至于那MappingJacksonJsonView,我是没耐心去看他的文档了,不过我知道sf上有个struts对json的插件,竟然是把Action序列化成json到客户端,如此反常规的做法让我不得不“返璞归真”直接调用response了,不知道你是哪种情况


你还真是没仔细看,人家可以指定root的,action是个根对象,你完全可以指定某一个根
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

哈哈,我也是草草看了下别人的代码,没看文档了,真是贻笑大方,多谢指教
18 楼 eya 2011-04-22  
看一下源码,要不了20分钟,什么都明白了!
17 楼 kjj 2011-04-22  
引用

注解要强制框架去捕获的,至于那MappingJacksonJsonView,我是没耐心去看他的文档了,不过我知道sf上有个struts对json的插件,竟然是把Action序列化成json到客户端,如此反常规的做法让我不得不“返璞归真”直接调用response了,不知道你是哪种情况


你还真是没仔细看,人家可以指定root的,action是个根对象,你完全可以指定某一个根
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
16 楼 爪哇岛岛主 2011-04-22  
还是基础要过关才是王道,这些都是基础!
15 楼 lookdd1 2011-04-22  
我皇很给力。。。。那俩伙计一把抓起影帝可真是乐死我了。。
14 楼 learnworld 2011-04-22  
invincibleLiu 写道
解决这次的问题我访问了大量的关于Spring3.0介绍的英文论坛,发现早在09年的时候国外就对3.0有了成熟的应用了,而我今天才掌握一点皮毛,想起两年前的巴萨是何等的辉煌,而过去一周的巴萨却判若两人,被皇马戏弄于鼓掌,怀古而伤今,由感而发,写下此文,与此时此刻与我有同样心情的同志共勉!

革命尚未成功,同志仍需努力!
不过话说巴萨即使输了一场,但还没到被戏弄于股掌的地步。凭心而论,水平还是远远高于皇马的。
13 楼 xbcoil 2011-04-22  
现在感觉spring的 bean那么陌生.是不是我好久没动代码的原因?
12 楼 Brera 2011-04-22  
spring mvc一直在用jackson
11 楼 jiangm520 2011-04-22  
spring 是和json集成的哈,你网上 google哈!也就是你说的jsonview,我之前都是采用这种方式的,后来采用模块化jsp页面实现ajax就没有用json的了
毕竟json维护比较的麻烦!
10 楼 zhangtsi 2011-04-22  
<p> </p>
<p> quote&gt;&gt;:</p>
<p>   <br>    而过去一周的巴萨却判若两人,被皇马戏弄于<span style="color: #ff0000;">鼓掌</span>,怀古而伤今,由感而发,写下此文,与此时此刻与我有同样心情的同志共勉! </p>
<p> </p>
<p> &lt;&lt; quote</p>
<p> </p>
<p>     樓主真有才呀。 做技術的非整個騷客似的。</p>
9 楼 風一樣的男子 2011-04-22  
引用
这时候我们要来做Viewer了,很多搞JSON的看到springsource上推荐的那个MappingJacksonJsonView类和超长的英文解释后直接晕了———跟我一样,其实完全没必要,请静静的思考一下,我们要的json是什么?还不是字符串,只不过改了个潮点的名字而已,只要能获得HttpServletResponse对象一切OK


用Jackson性能是个考虑
另外在代码里获取HttpServletResponse是不可取的
和Servlet没啥两样了
8 楼 arong 2011-04-22  
返回json,用@ResponseBody直接输出POJO就可以了吧,POJO包含属性:id,name....

@RequestMapping(value = "/{id}", method=RequestMethod.GET)
public @ResponseBody Pojo edit(@PathVariable Integer id){
return service.find(id);
}
7 楼 peak 2011-04-22  
3.0提供了@responseBody来返回各种类型的对象,包括json,在配置一个转换器就可以了,官方文档上例子很容易看懂
6 楼 linvar 2011-04-22  
@responseBody
done
5 楼 rocketball 2011-04-22  
http://liukai.iteye.com/blog/975103
看下这篇文章吧,可以全部采用标注的形式
4 楼 invincibleLiu 2011-04-21  
grandboy 写道
我都用Jackson来序列化,然后直接打出来。你指出这行肯定要有,因为我还有很多@Controller, @Autowired 这些东西呢。我就想把那个JsonView搞出来,但是始终没有成功,不知道原因在哪里。

对啊,我也试图研究过renderMergedOutputModel方法,不过里面的有些类看不到源码,也我就搞不定了,求真相

相关推荐

    SpringMVC3.0_Demo

    这个名为"SpringMVC3.0_Demo"的压缩包文件很可能是为了展示如何配置和使用SpringMVC 3.0进行Web应用开发,包含的子文件"spring3"和"jpa"可能分别对应Spring框架核心库和Java持久化API(JPA),这两部分都是SpringMVC...

    springmvc3.0

    Spring MVC 3.0是Spring框架的一个重要组成部分,专门用于构建Web应用程序的模型-视图-控制器(MVC)架构。这个版本引入了许多增强功能,提高了开发效率和灵活性。结合Hibernate,一个流行的Java持久化框架,可以...

    SpringMVC3.0+MyIbatis3.0(分页示例

    本示例聚焦于如何在SpringMVC 3.0和MyBatis 3.0环境中实现分页功能,这在处理大量数据时尤其重要,能够提高用户体验并减轻服务器压力。 **SpringMVC 3.0** SpringMVC是Spring框架的一部分,它是一个基于模型-视图-...

    springmvc3.0所需jar绿色包

    在描述中提到的 "springmvc3.0所需jar绿色包" 指的是包含了 Spring MVC 3.0 版本运行所需的所有 JAR 文件的一个集合,通常这些 JAR 文件被用来创建一个无需安装的可执行环境,也就是所谓的“绿色版”。 Spring MVC ...

    springmvc3.0实战指南

    springmvc3.0实战指南 讲的很不错!适合初学者,对开发者很有指导意义!

    SpringMVC 3.0实战指南

    SpringMVC 3.0实战指南,PPT Java Web开发的最好的MVC框架指南

    springMVC3.0与ssh2的注解开发demo

    在"springMVC3.0与ssh2的注解开发demo"项目中,开发者使用了最新的SpringMVC 3.0版本,该版本引入了更多的注解支持,使得配置文件大大简化,提高了开发效率。SpringMVC的注解如@Controller、@RequestMapping、@...

    SpringMVC3.0

    主要讲些SpringMVC的注解,以及常用的注解方式介绍。大家可以下下来看看,挺好的。

    SpringMVC3.0+MyIbatis3.0(分页示例)

    在本项目中,"SpringMVC3.0+MyIbatis3.0(分页示例)" 是一个结合了SpringMVC和MyBatis两大框架的实战应用,主要展示了如何在实际开发中实现数据的分页展示。这个项目可能是为了教学或者演示目的,通过源码分析,可以...

    springMVC-3.0-file-upload.rar_SpringMVC3.0-api _springmvc_spring

    "springMVC-3.0-file-upload.rar" 包含了一个示例,展示了如何在Spring MVC应用中集成文件上传功能,这个例子的描述表明它是基于注解驱动的,这意味着我们将使用如`@Controller`、`@RequestMapping`等注解来定义控制...

    SpringMVC3.0+Hibernate3.0+jQuery+Mysql实现登录注册(完整版)

    在本项目中,我们主要探讨的是如何利用SpringMVC 3.0、Hibernate 3.0、jQuery和MySQL来构建一个完整的登录注册系统。这个系统不仅涵盖了后台的业务逻辑处理,还包括了前端的用户交互与数据验证。下面将分别详细介绍...

    SpringMVC3.0-Jar全量包含cglib几个包-aop的aspectj几个包

    下面将详细介绍这些关键组件及其在SpringMVC 3.0中的作用。 1. **SpringMVC**:Spring MVC是Spring框架的一个模块,用于构建基于模型-视图-控制器(MVC)架构的Web应用。它提供了一个灵活的处理模型,允许开发者将...

    MyEclipse8.6+SpringMVC3.0+Hibernate3.3环境搭建.doc

    本教程主要讲解如何使用MyEclipse8.6集成开发环境来搭建一个基于SpringMVC3.0和Hibernate3.3的Web应用环境,这对于初学者来说是非常实用的。下面我们将详细地分解每个步骤。 首先,我们从创建Web Project项目开始:...

    springMVC3.0 + MyBatis3.1 整合

    springMVC3.0 + MyBatis3.1 花了2天整合成功的DEMO Spring 用的是基于注解的 MyBatis 用的是基于XML的 带表结构 有增删改查的小例子(含事务) 个人认为这套小框架有有兴趣的人 完全可以自己修改修改, 作为自己以后...

    SpringMVC学习(一)——SpringMVC入门小程序

    在“SpringMVC学习(一)——SpringMVC入门小程序”中,我们首先会接触到SpringMVC的基本概念。这通常包括以下几个核心组件: 1. **DispatcherServlet**:这是SpringMVC的前端控制器,负责接收HTTP请求,并根据配置...

    SpringMVC中后台转换json格式

    此外,为了让SpringMVC知道如何将你的Java对象转换为JSON,你需要在你的模型类上使用Jackson的注解,例如`@JsonProperty`、`@JsonInclude`、`@JsonIgnore`等。这些注解可以帮助控制哪些属性应该被包含在JSON中,哪些...

    SpringMVC 3.0 HelloWorld 源码 (Maven)

    在本项目“SpringMVC 3.0 HelloWorld”中,我们将深入探讨如何使用Maven构建一个简单的Spring MVC应用。Maven是一个项目管理和综合工具,它帮助开发者管理依赖、构建项目并遵循标准的开发过程。 首先,我们需要了解...

Global site tag (gtag.js) - Google Analytics