import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; import com.xxx.xxx.service.snmp.Pair; import com.xxx.xxx.service.snmp.TimeScope; import lombok.Data; import lombok.NoArgsConstructor; import org.apache.commons.beanutils.BeanMap; import org.junit.Test; import java.sql.Timestamp; import java.time.LocalDateTime; import java.time.ZoneId; import java.util.HashMap; import java.util.Map; @Data @NoArgsConstructor public class QueryConditionBuilder { LocalDateTime startTime; LocalDateTime endTime; Long nodeId; Long fsId; Long memId; Long ifCardId; private QueryConditionBuilder(QueryConditionBuilder.Builder builder) { setStartTime(builder.startTime); setEndTime(builder.endTime); setNodeId(builder.nodeId); setFsId(builder.fsId); setMemId(builder.memId); setIfCardId(builder.ifCardId); } public static QueryConditionBuilder.Builder newBuilder() { return new QueryConditionBuilder.Builder(); } public Map<String,Object> toFilter() { ObjectMapper mapper = new ObjectMapper(); JavaTimeModule module = new JavaTimeModule(); //https://github.com/networknt/light-4j/issues/82 mapper.registerModule(module); mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); //2019-10-11更新代码,忽略值为null
mapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY);//2019-10-11更新代码,忽略空字符串属性
Map<String,Object> filter = mapper.convertValue(this,Map.class); System.out.printf("查询条件:%s ", JSON.toJSONString(filter)); return filter; } //https://stackoverflow.com/questions/6796187/java-introspection-object-to-map/57057596#57057596 public Map<String,Object> toFilter2(){ Map<String, Object> filter = new HashMap<String, Object>(); Map<Object, Object> introspected = new BeanMap(this); for (Map.Entry<Object, Object> entry:introspected.entrySet()) { String key = (String)entry.getKey(); if("class".equals(key)) continue; Object value = entry.getValue(); filter.put(key,value); } return filter; } public static final class Builder { private LocalDateTime startTime; private LocalDateTime endTime; private Long nodeId = null; private Long fsId = null; private Long memId =null; private Long ifCardId = null; private Builder() { } public QueryConditionBuilder.Builder withStartTime(LocalDateTime val) { startTime = val; return this; } public QueryConditionBuilder.Builder withEndTime(LocalDateTime val) { endTime = val; return this; } public QueryConditionBuilder.Builder withNodeId(Long val) { nodeId = val; return this; } public QueryConditionBuilder.Builder withFsId(Long val) { fsId = val; return this; } public QueryConditionBuilder.Builder withMemId(Long val) { memId = val; return this; } public QueryConditionBuilder.Builder withIfCardId(Long val) { ifCardId = val; return this; } public QueryConditionBuilder build() { return new QueryConditionBuilder(this); } } @Test public void test() { Pair<Timestamp, Timestamp> scope = TimeScope.computeDate("24h"); Timestamp startTime = scope.getFirst(); Timestamp endTime = scope.getSecond(); LocalDateTime now = LocalDateTime.now(ZoneId.of("+8")); LocalDateTime yesterday = now.plusHours(-24); Map<String, Object> condition = QueryConditionBuilder.newBuilder() .withStartTime(yesterday) .withEndTime(now) .build().toFilter(); Map<String, Object> condition2 = QueryConditionBuilder.newBuilder() .withStartTime(yesterday) .withEndTime(now) .build().toFilter2(); System.out.println(condition); System.out.println(condition2); } }
输出结果:
查询条件:{"startTime":"2019-07-17T16:41:40.031","endTime":"2019-07-18T16:41:40.031"} {startTime=2019-07-17T16:41:40.031, endTime=2019-07-18T16:41:40.031, nodeId=null, fsId=null, memId=null, ifCardId=null} {fsId=null, startTime=2019-07-17T16:41:40.031, endTime=2019-07-18T16:41:40.031, nodeId=null, ifCardId=null, memId=null}