jackson提供动态序列化的输出json
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