java实用小知识

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)


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值