1. jackson
Jackson是一个简单基于Java应用库,Jackson可以轻松的将Java对象转换成json对象
和xml文档,同样也可以将json、xml转换成Java对象
核心代码:
ObjectMapper om = new ObjectMapper();
mapper.writeValueAsString(obj);
int count = metaData.getColumnCount();
map.put(metaData.getColumnName(i), rs.getObject(i));
2. jackson将java–>json
2.1 JavaBean/Map
2.2 数组[]
2.3 混合模式
package com.zy.jquery;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zy.entity.Student;
/**
* 后台json的三种格式的体现形式
* @author 1
*
*/
public class DemoA {
public static void main(String[] args) throws JsonProcessingException {
//json对象形式
Student stua=new Student("001", "A1");
ObjectMapper om=new ObjectMapper();
System.out.println(om.writeValueAsString(stua));
//json数组形式
Student stub=new Student("002", "B2");
List list1=new ArrayList<>();
list1.add(stua);
list1.add(stub);
System.out.println(om.writeValueAsString(list1));
//json混合形式
Map map=new HashMap<>();
map.put("s003", "C3");
map.put("s004", list1);
System.out.println(om.writeValueAsString(map));
}
}
package com.zy.jquery;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
/**
* javaBean与Map集合转换成json字符串的格式是一样的(除去map集合无序排列)
* @author 1
*
*/
public class DemoB {
public static void main(String[] args) throws JsonProcessingException {
ObjectMapper om=new ObjectMapper();
//对象
Map stua=new HashMap<>();
stua.put("001", "A1");
stua.put("002", "B2");
System.out.println(om.writeValueAsString(stua));
//数组
Map stub=new HashMap<>();
stub.put("00a", "Aa");
stub.put("00b", "Bb");
List
java->json死循环
忽略双向关联的一个方向即可
@JsonIgnore/程序控制
//实体类
@JsonIgnore
private Set sets=new HashSet<>();
package com.zy.jquery;
import java.util.HashSet;
import java.util.Set;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zy.entity.Student;
import com.zy.entity.Teacher;
/**
* json死循环问题(java.lang.StackOverflowError)
* 1,由双向绑定改成单向绑定
* 2,@JsonIgnore,将彼此循环调用的属性忽略,不参与对象转成json格式的字符串(JavaBean)
* @author 1
*
*/
public class DemoC {
public static void main(String[] args) throws JsonProcessingException {
Student stua=new Student("s01", "Aa");
Student stub=new Student("s02", "Bb");
Teacher tea1=new Teacher("t01", "Ta",null);
Teacher tea2=new Teacher("t02", "Tb",null);
Set sets=new HashSet<>();
sets.add(stua);
sets.add(stub);
tea1.setSets(sets);
Set sett=new HashSet<>();
sett.add(tea1);
sett.add(tea2);
stua.setSett(sett);
ObjectMapper om=new ObjectMapper();
System.out.println(om.writeValueAsString(stua));
}
}
5. jQuery的ajax请求
$.ajax
url
URL后添加时间戳防止浏览器缓:xxx?ts=new Date().getTime()
success
dataType
5.1 :用jQuery的ajax实现的三级联动(部分代码,内有代码注释,用map集合代替了实体类)
5.1.1 Dao
package com.zy.util;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class JsonBaseDao extends BaesDao
package com.zy.dao;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.zy.util.JsonBaseDao;
import com.zy.util.JsonUtil;
import com.zy.util.PageBean;
import com.zy.util.StringUtils;
public class RegionDao extends JsonBaseDao{
public List> regionList(Map paramMap,PageBean pageBean) throws InstantiationException, IllegalAccessException, SQLException{
String id = JsonUtil.getparamVal(paramMap, "ID");
String sql=" select * from ch_region where true ";
// 判断id是否为空,再拼接SQL语句
if(StringUtils.isBlank(id)) {
sql+=" and parent_id=7459 ";
}else {
sql+=" and parent_id="+id;
}
return super.executeQuery(sql, pageBean);
}
// public static void main(String[] args) { //测试
// Map paramMap=new HashMap();
// paramMap.put("ID", new String[] {"9504"});
// RegionDao rd=new RegionDao();
// try {
// List> rList = rd.regionList(paramMap, null);
// System.out.println(rList);
// } catch (InstantiationException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (IllegalAccessException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
// }
}
5.1.2 Util
package com.zy.util;
import java.util.Arrays;
import java.util.Map;
/**
* 专门用来处理json数据的工具包
* @author 1
*
*/
public class JsonUtil {
/**
* 从paramMap拿到需要的查询维度,用于SQL语句拼接
* @param paramMap 从jsp页面传递到后台的参数集合(req.getParamterMap)
* @param Key 某一个键
* @return
*/
public static String getparamVal(Map paramMap,String Key) {
if(paramMap!=null && paramMap.size()>0) {
// 拿到这个键的值
String[] vals = paramMap.get(Key);
// 判断是否为空
if(vals!=null && vals.length>0) {
// 将数组vals转换成字符串的方法
String val = Arrays.toString(vals);
// substring方法去[ ]
return val.substring(1, val.length()-1);
}
return "";
}
return "";
}
}
package com.zy.util;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponse;
public class ResponseUtil {
public static void write(HttpServletResponse response,Object o) throws IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out=response.getWriter();
out.println(o.toString());
out.flush();
out.close();
}
}
5.1.3 Web
package com.zy.web;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zy.dao.RegionDao;
import com.zy.util.ResponseUtil;
@WebServlet(name="RegionServlet",urlPatterns="/doRegion")
public class RegionServlet extends HttpServlet {
private static final long serialVersionUID = 3008544552320754306L;
private RegionDao rd=new RegionDao();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// TODO Auto-generated method stub
try {
List> rList = rd.regionList(req.getParameterMap(), null);
ObjectMapper om=new ObjectMapper();
ResponseUtil.write(resp, om.writeValueAsString(rList));
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
5.1.4 Jsp页面代码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ include file="/jsp/common/head.jsp" %>
Insert title here
$.ajax实现省市联动
China 地址:
5.1.5 自定义jQuery插件
$(function() {
// 根据id获取项目名
var curl=$("#curl").val();
// jQuery的ajax方法
$.ajax({
url:curl+"/doRegion", //请求的URL
success:function(data){ //回调函数:当请求之后调用。传入返回后的数据,以及包含成功代码的字符串
for(index in data){ //遍历所有返回的数据(data:返回过来字符串的所有属性值)
// console.log(data[index]); 控制台查看返回的所有数据
// 根据select的id追加所有省的option
$("#province").append("");
}
},
dataType:"json" //指定json的数据处理方式
});
$("#province").change(function() { //触发每个匹配元素的change事件,change事件会在元素失去焦点的时候触发,也会当其值在获得焦点后改变时触发
// this.value 当前属性值(省id的值)
$("option:gt(0)","#city").remove(); //移除id为city的select(清除追加,从第一行开始)
$.ajax({
url:curl+"/doRegion?ID="+this.value, //请求的URL和参数省id的值
success:function(data){
for(index in data){
$("#city").append("");
}
},
dataType:"json"
});
$("#city").change(function() {
$("option:gt(0)","#county").remove(); //移除id为county的select(清除追加,从第一行开始)
$.ajax({
// this.value 当前属性值(市id的值)
url:curl+"/doRegion?ID="+this.value,
success:function(data){
for(index in data){
$("#county").append("");
}
},
dataType:"json"
});
})
})
})