1: 有时候编程会遇到在方法中循环获取某些有规律的类属性值问题
可以使用 org.apache.commons.beanutils.PropertyUtils; 包提供的
getProperty(Object bean,String name) 方法
其中 bean 是实体类 name 是实体类中的属性名称
2: json 是我们经常要使用的前后端交互数据方式,下面介绍一个 对象 与 json 互相转换的方法
使用类:com.fasterxml.jackson.databind.ObjectMapper
在项目实际使用中可以把该类的获取 封装成一个单例实用类,如下:
<pre name="code" class="java">package com.yao.util;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.lang.reflect.InvocationTargetException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.commons.beanutils.PropertyUtils;
import org.springframework.util.Assert;
import com.fasterxml.jackson.core.JsonGenerationException;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JavaType;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.mchange.v2.util.PropertiesUtils;
import com.yao.entity.Test;
import com.yao.entity.TestJson;
/**
* Utils - JSON
*
*
*/
public final class JsonUtils {
/** ObjectMapper */
private static ObjectMapper mapper = new ObjectMapper();
/**
* 不可实例化
*/
private JsonUtils() {
}
/**
* <span style="color:#ff0000;">将对象转换为JSON字符串</span>
*
* @param value
* 对象
* @return JSOn字符串
*/
public static String toJson(Object value) {
try {
return mapper.writeValueAsString(value);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将JSON字符串转换为对象
*
* @param json
* JSON字符串
* @param valueType
* 对象类型
* @return 对象
*/
public static <T> T toObject(String json, Class<T> valueType) {
Assert.hasText(json);
Assert.notNull(valueType);
try {
return mapper.readValue(json, valueType);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
public static void main(String[] args) {
List testList = new ArrayList();
TestJson test1 = new TestJson();
test1.setAge(1000);
test1.setName("wugui");
TestJson test2 = new TestJson();
test2.setAge(1000);
test2.setName("wugui");
testList.add(test1);
testList.add(test2);
try {
PrintWriter out = new PrintWriter(System.out);
try {
mapper.writeValue(out, mapper.writeValueAsString(testList));
} catch (IOException e) {
e.printStackTrace();
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 将JSON字符串转换为对象
*
* @param json
* JSON字符串
* @param typeReference
* 对象类型
* @return 对象
*/
public static <T> T toObject(String json, TypeReference<?> typeReference) {
Assert.hasText(json);
Assert.notNull(typeReference);
try {
return mapper.readValue(json, typeReference);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 将JSON字符串转换为对象
*
* @param json
* JSON字符串
* @param javaType
* 对象类型
* @return 对象
*/
public static <T> T toObject(String json, JavaType javaType) {
Assert.hasText(json);
Assert.notNull(javaType);
try {
return mapper.readValue(json, javaType);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* <span style="color:#ff0000;">将对象转换为JSON流</span>
*
* @param writer
* writer
* @param value
* 对象
*/
public static void writeValue(Writer writer, Object value) {
try {
mapper.writeValue(writer, value);
} catch (JsonGenerationException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
package com.yao.entity;
import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility;
@JsonAutoDetect(fieldVisibility = Visibility.NONE, getterVisibility = Visibility.NONE, setterVisibility = Visibility.NONE, isGetterVisibility = Visibility.NONE, creatorVisibility = Visibility.NONE)
public class TestJsonBase {
private int baseId;
@JsonProperty
private String baseName;
public int getBaseId() {
return baseId;
}
public void setBaseId(int baseId) {
this.baseId = baseId;
}
public String getBaseName() {
return baseName;
}
public void setBaseName(String baseName) {
this.baseName = baseName;
}
}
只有标注了 @JsonProperty 的属性才可以被互相转换
3: 前端jsp页面使用ajax 发送异步请求并获取数据实用代码如下:
test freemarker
${setting.siteUrl}
${setting.address}
${setting.siteCloseMessage}
${siteUrl.siteUrl}
${template.update_delay}
<script type="text/javascript" src="${setting.siteUrl}/resources/admin/js/jquery.js"></script>
<script type="text/javascript" src="${setting.siteUrl}/resources/admin/js/jquery.tools.js"></script>
<script type="text/javascript" src="${setting.siteUrl}/resources/admin/js/jquery.validate.js"></script>
<script type="text/javascript" src="${setting.siteUrl}/resources/admin/editor/kindeditor.js"></script>
<script type="text/javascript" src="${setting.siteUrl}/resources/admin/js/common.js"></script>
<script type="text/javascript" src="${setting.siteUrl}/resources/admin/js/input.js"></script>
<script type="text/javascript" src="${setting.siteUrl}/resources/admin/js/jquery.cookie.js"></script>
<input type="button" name="点击测试ajax" value="点击测试ajax" οnclick="testAjax()"/>
<script type="text/javascript">
function test(){
alert('33434');
}
function testAjax(){
$.ajax({
url: "http://www.dst.com/test/testJson.dhtml",
type: "GET", //post 还是 get 提交表单数据,注意如果写的不对,ajax会执行不成功
data: {}, //传输的其他数据
dataType: "json", //可以是 text json 等
cache: false,
success: function(data) { //从后台传回的数据
//data = decodeURIComponent(data); //js方法 对 encodeURIComponent() 函数编码的 URI(即web上的资源,如html.图像.程序等数据) 进行解码
//例如后台进行如下数据编码
//String encode= URLEncoder.encode(bbb.toString().substring(0, bbb.toString().length()-1), "UTF-8");
//对应的js解码如下:
//success: function(data) {
// data = decodeURIComponent(data);
//****************如果返回的是text,直接获取即可,然后进行js处理
//****************如果是返回的json对象
//此时返回的data已经是object jquery对象了,直接调用对象的属性获取即可
//json样式如下:
//{"id":1,"createDate":null,"modifyDate":null}
//对于从后台写,需要后台代码把 " 进行转换 \"
//alert(data.id);
//****************如果是返回的json数组
//json样式如下:
//[{"id":1,"createDate":null,"modifyDate":null},{"id":2,"createDate":null,"modifyDate":null}]
//如何获取呢?
//alert(data[0].id);//可以通过数组方式操作
//如何遍历呢?
/*$.each( data, function(index, content){
alert(index);//索引下标从0开始
alert(content.id);//content代表当前循环到的对象
});*/
//*****************如果是返回的Map对象呢
//后台写回数据如下:
//{"test1":{"id":1,"createDate":null,"modifyDate":null},"test2":{"id":2,"createDate":null,"modifyDate":null}}
$.each( data, function(index, content){
alert(index);//此时index为 传过来的map的key ,如:test1 test2
alert(content.id);//content代表当前循环到的key对应的对象
});
alert(data);//可以通过该方法查看传过来的是对象还是对象数组
},
error:function(){
alert('error');
}
});
}
</script>
对应的后台java代码如下;
@RequestMapping(value = "/testJson", method = RequestMethod.GET)
<span style="color:#ff0000;">@ResponseBody //spring 的注解,该方法直接返回String 字符串即可,就能写回数据,当然也可以通过输入流写回</span>
public String testJson(){
System.out.println("进入了ajax测试方法...............");
List testList = new ArrayList();
Test test = new Test();
test.setId(1l);
test.setName("张三");
Test test2 = new Test();
test2.setId(2l);
test2.setName("李四");
testList.add(test);
testList.add(test2);
Map testMap = new HashMap();
testMap.put("test1", test);
testMap.put("test2", test2);
//***************写回json对象
// String jsonStr = JsonUtils.toJson(test);
// System.out.println(jsonStr);
//***************写回json对象 list
// String jsonStr = JsonUtils.toJson(testList);
// System.out.println(jsonStr);
//***************写回json对象 list
String jsonStr = JsonUtils.toJson(testMap);
System.out.println(jsonStr);
return jsonStr;
}
4: 定期执行js脚本
function testAjax(){
alert("测试定时弹出");
}
setInterval(testAjax,1000); //每1000毫秒执行一次
5:JSON对象与字符串之间的互换
jQuery.parseJSON(json)方法将字符串转换成json对象
把json对象 data 转换为字符串 var dataStr = JSON.stringify(data)