jackson提供动态序列化的输出json
测试代码:
设置group为0 :不输出group
设置group为1:输出group
static final ObjectMapper mapper = new ObjectMapper();
static {
//用到mapper的地方千万别换
mapper.setFilters(getFilters());
}
private static FilterProvider getFilters() {
FilterProvider filters = new SimpleFilterProvider()
.addFilter("afareFlightFilter", new SimpleBeanPropertyFilter(){
@Override
public void serializeAsField(
Object bean,
org.codehaus.jackson.JsonGenerator jgen,
org.codehaus.jackson.map.SerializerProvider prov,
org.codehaus.jackson.map.ser.BeanPropertyWriter writer)
throws Exception {
if (afareFlightFilterSets.contains(writer.getName())) {
return;
}
if ("group".contains(writer.getName()) &&
StringUtils.equals(writer.get(bean).toString(), "0")) {
return;
}
writer.serializeAsField(bean, jgen, prov);
}
});
return filters;
}
@JsonFilter("afareFlightFilter")
public class AfareFlight implements Serializable{
private static final long serialVersionUID = -5691992455196596940L;
String carrier;
String flightNumber;
String depAirport;
String depTime;
String arrAirport;
String arrTime;
String stopCities;
boolean codeshare;
String cabin;
/* 新增字段:舱位等级 1 经济舱,2 商务舱,3 头等舱,*/
int cabinClass = 0;
String aircraftCode;
/**
* 当前航段所属航程序号,从1开始
* 例如多程第一段:A-B-C;第二段:D-F
* 则航段A-B B-C的tripIndex值为1,D-F的tripIndex值为2
*/
int group;
}
测试代码:
public static void main(String[] args) throws Exception {
AfareBookingRequest request = new AfareBookingRequest();
AfareSimpleRouting routing = new AfareSimpleRouting();
request.setRouting(routing);
List<AfareFlight> fromSegments = Lists.newArrayList();
routing.setFromSegments(fromSegments);
AfareFlight f = new AfareFlight();
f.setGroup(0);
fromSegments.add(f);
String s = mapper.writeValueAsString(request);
System.out.println(s);
}
设置group为0 :不输出group
设置group为1:输出group