com.fasterxml.jackson.databind.JsonMappingException:无法解析id为';过滤器文件';;未配置FilterProvider

com.fasterxml.jackson.databind.JsonMappingException:无法解析id为';过滤器文件';;未配置FilterProvider,json,jersey,Json,Jersey,我已经对POJO(profile)对象进行了动态过滤。过滤逻辑工作正常。需要将过滤对象作为响应返回。但在返回profile对象时,jersey层中面临问题(MappableException) 有人能在这方面指导我吗 过滤器逻辑代码: POJO: @JsonFilter(“filterProfile”) 错误: 原因:com.fasterxml.jackson.databind.JsonMappingException:Can 无法解析id为“filterProfile”的PropertyFil

我已经对POJO(profile)对象进行了动态过滤。过滤逻辑工作正常。需要将过滤对象作为响应返回。但在返回profile对象时,jersey层中面临问题(MappableException)

有人能在这方面指导我吗

过滤器逻辑代码: POJO: @JsonFilter(“filterProfile”)

错误: 原因:com.fasterxml.jackson.databind.JsonMappingException:Can 无法解析id为“filterProfile”的PropertyFilter;无过滤器提供程序 配置于 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.procedue(WriterInterceptorExecutor.java:162) 在 org.glassfish.jersey.server.internal.json with paddinginterceptor.aroundWriteTo(json with paddinginterceptor.java:106) 在 org.glassfish.jersey.message.internal.WriterInterceptorExecutor.procedue(WriterInterceptorExecutor.java:162)


您的代码具有在序列化时筛选属性的选项,因此即使它没有引发任何异常,筛选器也无法工作,因为它缺少以下行:

mapper.addMixIn(Object.class, Profile.class);
但是,您说过“过滤逻辑工作正常”。考虑到这一点,
请发布一个简单的代码(可能是一个主要方法?)来重现这个问题。

下面的代码片段对我来说很好

ObjectMapper mapper = new ObjectMapper(); 
         mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.filterOutAllExcept(set1);
        FilterProvider filterProvider = new SimpleFilterProvider().addFilter("filter", filter).setFailOnUnknownId(false);
        ObjectWriter writer = mapper.writer(filterProvider);
        String writeValueAsString = writer.writeValueAsString(profile);
        Profile resultProfile = mapper.readValue(writeValueAsString,Profile.class);
注意:若您并没有将stringformat json转换为Profile。正如代码片段的最后2行所述,那个么您的响应将是如上所述的视图

{\"name\":\"JPA in Use\",\"reviews\":[{\"id\...
ObjectMapper mapper = new ObjectMapper(); 
         mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
        SimpleBeanPropertyFilter filter = SimpleBeanPropertyFilter.filterOutAllExcept(set1);
        FilterProvider filterProvider = new SimpleFilterProvider().addFilter("filter", filter).setFailOnUnknownId(false);
        ObjectWriter writer = mapper.writer(filterProvider);
        String writeValueAsString = writer.writeValueAsString(profile);
        Profile resultProfile = mapper.readValue(writeValueAsString,Profile.class);
{\"name\":\"JPA in Use\",\"reviews\":[{\"id\...