JSON设置属性转换器的方法

最近在做空间数据方面的工作,想要定制Geometry数据的JSON格式,从这学到一招JSON过滤属性,设置属性转换器的方法

bean

package test;

import org.codehaus.jackson.annotate.JsonIgnore;
import org.codehaus.jackson.map.annotate.JsonSerialize;

import com.vividsolutions.jts.geom.Point;

public class Bridge {
	
	private String id;
	
	@JsonIgnore
	private String qlmc;
	
	@JsonSerialize(using = GeometryJSONFormater.class)
	private Point point;
	
	//此处省略了get/set方法
}
属性转换器

package test;

import java.io.IOException;

import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonProcessingException;
import org.codehaus.jackson.map.JsonSerializer;
import org.codehaus.jackson.map.SerializerProvider;

import com.vividsolutions.jts.geom.Geometry;

public class GeometryJSONFormater extends JsonSerializer<Geometry>{

	@Override
	public void serialize(Geometry value, JsonGenerator jgen,SerializerProvider provider) 
			throws IOException, JsonProcessingException {
		
		jgen.writeString(value.toString());
	}
}

测试类

package test;

import org.codehaus.jackson.map.ObjectMapper;

import com.vividsolutions.jts.geom.Coordinate;
import com.vividsolutions.jts.geom.GeometryFactory;
import com.vividsolutions.jts.geom.Point;

public class Test {
	
	public static void main(String[] args) throws Exception{
		Bridge o = new Bridge();
		o.setId("id");
		o.setQlmc("金门大桥");
		o.setPoint(createPoint(116,40));
		
		ObjectMapper mapper = new ObjectMapper();        
        String jsonstr = mapper.writeValueAsString(o);  
        System.out.println(jsonstr);
        
        //打印结果{"id":"id","point":"POINT (116 40)"}
	}

	static Point createPoint(double longitude, double latitude){
		GeometryFactory geometryFactory = new GeometryFactory();
		Coordinate coord = new Coordinate(longitude, latitude);  
        Point point = geometryFactory.createPoint( coord );    
        return point; 
	}
}

JSON有一些标注用于不同用途,比如刚才用到的@JsonIgnore,表示忽略此属性,其他的用到时再查吧。

注意Jackson用于处理Geometry数据时,版本太低可能会报异常(比如Jackson1.8.0版本),请用最新版本的Jackson。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值