Spring3+JSON+JQuery

测试环境是Spring3+JQuery,相互通信用的都是JSON.



没想到因为这个JSON白白搭了好几天时间,网上找的资料真不靠谱,大部分精力都是折在怎么把客户端的数据转换成JSON回传给服务端上了。

先说下服务端的配置,spring3+jackson很给力,按照标准配置就可以,JSON无论发送还是接收都一样的


<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

	<context:component-scan base-package="放你controllers的包名" />

	<bean id="viewResolver"
		class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		p:prefix="/WEB-INF/" p:suffix=".jsp" />
		
	<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
	    <property name="messageConverters">  
	        <list>  
	            <ref bean="mappingJacksonHttpMessageConverter" />  
	        </list>  
	    </property>  
	</bean>  
  
	<bean id="mappingJacksonHttpMessageConverter"  
    	class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter" />
    	
</beans>

controller的地方服务端向客户端传递json方式如下

@RequestMapping("/xxx.do")  
@ResponseBody 
public Object executeXXX(HttpSession session)
当然,括号里的参数有没有都可以,HttpServletRequest req还是HttpServletResponse resp都随你兴趣,也没什么顺序影响。返回值时只要把正常的java对象返回就行了,spring+jackson自动会把它转换成json格式,客户端的接收会是这个样子

$.post("/xxxx.do",function(data){
			var result = eval(data);
			if(result!=null){
				if(result.status=='ok'){
					alert('ok');
				}else if(result.status='none'){
					alert(result.message);
				}else if(result.status='error'){
					alert(result.message);
				}
			}			
		});

返回部分是在function(data){...}内的,给result就是json又转换成对象了,这里我放一下这个对象的java定义,容易理解

public class ResultStatus implements Serializable{
	private String status;
	private String message;
...
}

关键问题是从客户端把json发送给服务端怎么搞,网上给的好多例子都不靠谱,老子还是试出来的。

首先这个$.postJSON就没实现,也许有人成功了,不知道怎么配出来的,其实根本不用换,当客户端发送json数据到服务端时,仍然使用$.post。当然有说法是$.postJSON发送的是application/json,$.post发送的是 application/x-www-form-urlencoded,直接无视了。都他娘的不响应啊,用神马postJSON。

另外一个问题就是服务端,接收参数前需要加@RequestBody吗?我测试的结果是no。也许某种配置应该加,狮屎胜于熊便,加了这个注解,整个方法体都不能被触发。不排除修改某处配置可以实现,不管你找没找到,反正我没找到。网上的教程太坑爹了,全都是不全的,有全的,拿来试验又失败。哎

放个json发送的参数的例子

$.post("/xxxxx.do",{name:"abc",age:123},function(data){
...
});

服务器接收端

@RequestMapping("/xxxxx.do")
public void executeXXXXX(User user){
  System.out.println(user.getName());
}


这里的User是自定义类型

public class User{
  private String name;
  private int age;
...
}

大功告成

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值