ssm整合fastJSON
在博客上找了好久,发现很少有这方面的东西,下面开始我的配置
1.在pom文件中加入坐标
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.45</version>
</dependency>
注意 jackson就可以不用了
2.在spring-mvc.xml文件配置bean
<mvc:annotation-driven>
<mvc:message-converters register-defaults="true">
<!-- 配置Fastjson支持 -->
<bean class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
<value>application/json</value>
</list>
</property>
<property name="features">
<list>
<value>WriteMapNullValue</value><!--是否输出值为null的字段,默认为false -->
<value>QuoteFieldNames</value><!--输出key时是否使用双引号,默认为true -->
</list>
</property>
</bean>
</mvc:message-converters>
</mvc:annotation-driven>
配置完成之后 就可以实现ajax和controller的交互了
controller
package com.smx.ssm.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.github.pagehelper.PageInfo;
import com.smx.ssm.domain.Product;
import com.smx.ssm.service.ProductService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.annotation.security.RolesAllowed;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Controller
@RequestMapping("/product")
public class ProductController {
@Autowired
private ProductService productService;
@ResponseBody
@RequestMapping(value = "/findAll2.do")
public Map<String,JSONArray> findAll2(){
List<Product> productList = productService.findAll2();
JSONArray productJsonArray = JSONArray.parseArray(JSON.toJSONString(productList));
//System.out.println(productJsonArray);
Map result=new HashMap();
if (!productJsonArray.isEmpty()){
result.put("msg","success");
result.put("productJson",productJsonArray);
}else {
result.put("message","查询失败");
}
return result;
}
}
注意加上 @ResponseBody这个注解,作用是将controller的方法返回的对象通过配置的阿里的fastJSON转换为json,写入到response对象的body区,然后ajax的回调函数就可以接受。
jsp
$(function () {
$.ajax({
url:"${pageContext.request.contextPath}/product/findAll2.do",
type:"get",
dataType:"json",
success:function (result) {
var msg = result.msg;
if (msg=='success'){
$("#productId").empty();//清空下拉框
var str="<option>请选择产品名称</option>";
for (var i = 1; i < result.productJson.length; i++) {
var productName=result.productJson[i].productName;
var productId=result.productJson[i].id;//获取第i个对象的id,{}对象 [{},{},{}]数组里面存的是对象
str=str+'<option value="'+productId+'">'+productName+"</option>";
}
$("#productId").append(str);
}
},
error:function(XMLResponse){
alert(XMLResponse.responseText)
}
});
});
这样就可以接受后台返回的json了