`

spring MVC之返回JSON数据(Spring3.0 MVC)

 
阅读更多

spring MVC之返回JSON数据(Spring3.0 MVC)

----------

 

我们在本示例中,使用Spring3.0 MVC, Spring 3.0 MVC已经支持JSON了。

这里我们使用基于注解的方式,也是springMVC 3.0所支持的RESTFul风格的。

 

 

 

1.首先加入两个jar依赖,这里以maven构建为例:

<dependency>
	<groupId>org.codehaus.jackson</groupId>
	<artifactId>jackson-core-asl</artifactId>
	<version>1.8.4</version>
</dependency>
<dependency>
	<groupId>org.codehaus.jackson</groupId>
	<artifactId>jackson-mapper-asl</artifactId>
	<version>1.8.4</version>
</dependency>

这是spring MVC处理json数据时,所必须的jar依赖。

 

 

 

2.在spring mvc的配置文件中加入配置 

这里我们使用的是spring mvc的注解,如例:

<context:component-scan base-package="com.hundsun.twioo.business.action" />
<bean class="org.springframework.web.servlet.mvc.annotation.
	DefaultAnnotationHandlerMapping" />
<bean class="org.springframework.web.servlet.mvc.annotation.
	AnnotationMethodHandlerAdapter" >
	<property name="messageConverters">
		<util:list id="beanList">
			<ref bean="mappingJacksonHttpMessageConverter"/>
		</util:list>
	</property>
</bean>
<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.
	http.converter.json.MappingJacksonHttpMessageConverter">
	<property name="supportedMediaTypes">
		<list>
			<value>text/html;charset=UTF-8</value>
		</list>
	</property>
</bean>
<context:annotation-config/>

注意:org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter的Bean配置中,我们加入了messageConverters属性,在该属性中我们有配置mappingJacksonHttpMessageConverter这个Bean,它就是用来处理json数据转换的。

在mappingJacksonHttpMessageConverter的Bean配置中,我们有一个supportedMediaTypes属性,在这个属性

中我们添加了text/html;charset=UTF-8这个值,它是为了处理返回的json数据的编码,默认是ISO-88859-1的,这里我们把它设置为UTF-8,如果有乱码的情况,我们只需要修改这里就可以了。

 

 

 

3.控制器Controller上的注解使用

如例:

@Controller
@RequestMapping("/logins")
public class LoginController {

	@Autowired
	private LoginManagerService	loginManagerService;
	@Autowired
	private PermitManagerService permitManagerService;
	private Logger log = Logger.getLogger(LoginController.class);
	
	
	/**
	 * 用户登录系统
	 * @return
	 */
	@RequestMapping(value="/login")
	public ModelAndView login(HttpServletRequest request,HttpSession session){
		
		User user = null;
		List<Module> moduleList = null;
		try {
			//TwiooID
			Integer twiooId = ServletRequestUtils.getIntParameter(request, "twiooId"); 
			//群ID
			Integer groupId = ServletRequestUtils.getIntParameter(request, "groupId"); 
			user = loginManagerService.login(twiooId, 3);
			if(null != user){
				moduleList = permitManagerService.findPermit(user.getId());
			}
			session.setAttribute("user", user);
			session.setAttribute("permit", moduleList);
			session.setAttribute("twiooId", twiooId);
			session.setAttribute("groupId", groupId);
		} catch (Exception e) {
			e.printStackTrace();
			log.error("LoginController.login() execute error!!!");
		}
		System.out.println("login...................");
		return new ModelAndView("index");
	}
	
	
	/**
	 * 用户退出系统
	 * @return
	 */
	@RequestMapping(value="/exit")
	public ModelAndView exit(HttpServletRequest request,HttpSession session){
		
		session.removeAttribute("user");
		session.removeAttribute("permit");
		session.removeAttribute("twiooId");
		session.removeAttribute("twiooId");
		System.out.println("exit....................");
		return new ModelAndView("index");
	}
	
	
	/**
	 * 测试返回JSON数据
	 * @param session
	 * @return
	 */
	@RequestMapping(value="/test")
	@ResponseBody
	public Object test(HttpSession session){
		
		System.out.println("test....................");
		return session.getAttribute("permit");
	}
	
	

	public LoginManagerService getLoginManagerService() {
		return loginManagerService;
	}
	public void setLoginManagerService(LoginManagerService loginManagerService) {
		this.loginManagerService = loginManagerService;
	}
	public PermitManagerService getPermitManagerService() {
		return permitManagerService;
	}
	public void setPermitManagerService(PermitManagerService permitManagerService) {
		this.permitManagerService = permitManagerService;
	}
}

注意:test()方法上,我们使用了一个@ResponseBody的注解,Spring3.0 MVC @ResponseBody的作用是把返回值直接写到HTTP response body里。 test()这个方法就是我们这里关注的地方,它就是返回json数据到客户端去的。还要注意,这个test()方法返回的是Object(这里可以是任意类型),而不ModelAndView。 

 

 

 

 

分享到:
评论
10 楼 我是你们的爹 2016-05-19  
真垃圾
9 楼 107x 2015-05-23  
不错,谢谢!
8 楼 qq245282209 2013-07-29  
如果我的ResourceBundleViewResolver
还能用json传值吗?
7 楼 xiaoxing598 2013-07-09  
把你的代码复制过来,提示The prefix "util" for element "util:list" is not bound.
6 楼 notenlife 2013-02-21  
求教一下:
采用楼主的方式可以很方便的将java对象转换为json后返回json数据到客户端,但是如果我客户端是一个extjs代码,如下方法实现:

Ext.onReady(function(){
    Ext.QuickTips.init();
    var login = new Ext.FormPanel({
       labelWidth:80,
       url:'',
       frame:true,
       title:'用户查询',
       defaultType:'textfield',
       width:300,
       height:150,
       monitorValid:true,
       
       items:[{
           fieldLabel:'ID',
           name:'id',
           allowBlank:false
       },{
           fieldLabel:'结果',
           name:'userName',
       }],
       buttons:[{
           text:'获取',
           formBind: true,
           handler:function(){
           login.getForm().submit({
        	  waitTitle:"请稍后",
        	  waitMsg:'正在查询',
        	  dataType:"json",
              method:'post', 
              url:'getUser',
              success:function(form,action){
            	  alert("user is ");
              },
           failure:function(form, action){
              alert(action.result.userName);
           } 
           });
       }
       }]
    });
    login.render('login');
});

点击button按钮后,返回指挥到failure而无法到达success,我认为有可能是返回的json串缺少seccess:true属性的原因,请问楼主这种情况如何解决?
5 楼 zyhui98 2012-11-02  
嗯,我已经搞好了
4 楼 liguangt86 2012-11-01  
1.首先加入两个jar依赖,这里以maven构建为例:

这个是怎么加的?楼主可以把工程发给我么?谢谢了。lg0104@sina.com
3 楼 zyhui98 2012-10-22  
工程发给我下,谢谢,zyhui98@qq.com
2 楼 take 2012-05-11  
看一眼就明白了.
1 楼 leasonliang 2012-04-01  
老板的文字功底,实在太一般。读得非常费劲。不过,共享就是力量,谢谢

相关推荐

Global site tag (gtag.js) - Google Analytics