diff --git a/pom.xml b/pom.xml index 1c668c7..6a3b159 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ Surgical jar Surgical - 0.0.2 + 0.0.3 A tool for dynamically filtering entity properties based on Jackson https://github.com/ksprider/Surgical diff --git a/src/main/java/com/github/ksprider/surgical/CustomFilterProvider.java b/src/main/java/com/github/ksprider/surgical/CustomFilterProvider.java index ce89857..dc3e978 100644 --- a/src/main/java/com/github/ksprider/surgical/CustomFilterProvider.java +++ b/src/main/java/com/github/ksprider/surgical/CustomFilterProvider.java @@ -8,6 +8,10 @@ public class CustomFilterProvider extends FilterProvider { private final CustomPropertyFilter customPropertyFilter; + public CustomFilterProvider() { + this.customPropertyFilter = new CustomPropertyFilter<>(null, null, null, true); + } + public CustomFilterProvider(T root, SerializationHandler serializerHandler, String location, boolean isAll) { this.customPropertyFilter = new CustomPropertyFilter<>(root, serializerHandler, location, isAll); } diff --git a/src/main/java/com/github/ksprider/surgical/CustomPropertyFilter.java b/src/main/java/com/github/ksprider/surgical/CustomPropertyFilter.java index 5a19c03..defb6bd 100644 --- a/src/main/java/com/github/ksprider/surgical/CustomPropertyFilter.java +++ b/src/main/java/com/github/ksprider/surgical/CustomPropertyFilter.java @@ -34,9 +34,7 @@ public void serializeAsField(Object pojo, JsonGenerator gen, SerializerProvider writer.serializeAsField(pojo, gen, prov); return; } - - String key = getKey(gen.getOutputContext(), writer.getName()); - boolean serialize = isAll || cache.computeIfAbsent(key, it -> { + boolean serialize = isAll || cache.computeIfAbsent(getKey(gen.getOutputContext(), writer.getName()), it -> { T ot = (T) BeanUtils.instantiateClass(t.getClass()); BeanUtils.copyProperties(t, ot); return serializerHandler.isSerialize(gen.getOutputContext(), writer.getName(), ot); diff --git a/src/main/java/com/github/ksprider/surgical/spring/mvc/JSONResponseBodyAdvice.java b/src/main/java/com/github/ksprider/surgical/spring/mvc/JSONResponseBodyAdvice.java index ce8526c..5bf6766 100644 --- a/src/main/java/com/github/ksprider/surgical/spring/mvc/JSONResponseBodyAdvice.java +++ b/src/main/java/com/github/ksprider/surgical/spring/mvc/JSONResponseBodyAdvice.java @@ -51,7 +51,7 @@ public boolean supports(MethodParameter methodParameter, Class> selectedConverterType, ServerHttpRequest serverHttpRequest, ServerHttpResponse serverHttpResponse) { JSON jsonAnnotation = methodParameter.getMethod().getAnnotation(JSON.class); - String key = methodParameter.getExecutable().toString(); + String key = methodParameter.getMethod().toString(); CustomFilterProvider customFilterProvider = cache.computeIfAbsent(key, (it) -> { boolean isAll = null == jsonAnnotation; String treeStr = isAll ? "*" : jsonAnnotation.value(); diff --git a/src/main/java/com/github/ksprider/surgical/spring/mvc/ObjectMapperConfig.java b/src/main/java/com/github/ksprider/surgical/spring/mvc/ObjectMapperConfig.java index 30ff8f5..cb59ec4 100644 --- a/src/main/java/com/github/ksprider/surgical/spring/mvc/ObjectMapperConfig.java +++ b/src/main/java/com/github/ksprider/surgical/spring/mvc/ObjectMapperConfig.java @@ -2,8 +2,10 @@ import com.fasterxml.jackson.annotation.JsonFilter; import com.fasterxml.jackson.databind.ObjectMapper; +import com.github.ksprider.surgical.CustomFilterProvider; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.io.Serializable; @@ -18,9 +20,15 @@ public void setObjectMapper(ObjectMapper objectMapper) { this.objectMapper = objectMapper; } + @Bean + public CustomFilterProvider defaultFilterProvider() { + return new CustomFilterProvider<>(); + } + @Override public void afterPropertiesSet() throws Exception { objectMapper.addMixIn(Serializable.class, CustomPropertyFilterMixIn.class); + objectMapper.setFilterProvider(defaultFilterProvider()); } @JsonFilter("customPropertyFilter")