【发布时间】:2017-10-25 13:21:03
【问题描述】:
我已经对我的 POJO(profile) 对象进行了动态过滤。过滤逻辑工作正常。需要将过滤后的对象作为响应返回。但是在返回配置文件对象时,在球衣层面临问题(MappableException)。
有人可以指导我吗?
过滤逻辑代码:
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
FilterProvider filters = new SimpleFilterProvider() .addFilter("filterProfile",SimpleBeanPropertyFilter.serializeAllExcept(set1))
.addFilter("filterUserDetails", SimpleBeanPropertyFilter.serializeAllExcept(set2)).setFailOnUnknownId(false);
ObjectWriter writer = mapper.writer(filters);
try{
// Printing the filtered json object
filteredJson = writer.writeValueAsString(profile);
}
POJO:
@JsonFilter("filterProfile")
public class Profile {
@JsonProperty("session")
private Session session;
错误:
引起:com.fasterxml.jackson.databind.JsonMappingException: 可以 不解析 ID 为“filterProfile”的 PropertyFilter;没有 FilterProvider 配置在 com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:312) 在 com.fasterxml.jackson.databind.ser.std.StdSerializer.findPropertyFilter(StdSerializer.java:441) 在 com.fasterxml.jackson.databind.ser.std.BeanSerializerBase.serializeFieldsFiltered(BeanSerializerBase.java:731) 在 com.fasterxml.jackson.databind.ser.BeanSerializer.serialize(BeanSerializer.java:153) 在 com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:292) 在 com.fasterxml.jackson.databind.ObjectWriter$Prefetch.serialize(ObjectWriter.java:1429) 在 com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:951) 在 com.fasterxml.jackson.jaxrs.base.ProviderBase.writeTo(ProviderBase.java:625) 在 org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.invokeWriteTo(WriterInterceptorExecutor.java:265) 在 org.glassfish.jersey.message.internal.WriterInterceptorExecutor$TerminalWriterInterceptor.aroundWriteTo(WriterInterceptorExecutor.java:250) 在 org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162) 在 org.glassfish.jersey.server.internal.JsonWithPaddingInterceptor.aroundWriteTo(JsonWithPaddingInterceptor.java:106) 在 org.glassfish.jersey.message.internal.WriterInterceptorExecutor.proceed(WriterInterceptorExecutor.java:162)
【问题讨论】: