private PropertyFilter getPropertiesFilter(Optional<? extends Set<? extends Property>> properties) { return properties .map(this::toFieldNames) .map(SimpleBeanPropertyFilter::filterOutAllExcept) .orElse(SimpleBeanPropertyFilter.serializeAll()); }
private ObjectMapper newConfiguredObjectMapper(JmapResponse jmapResponse) { ObjectMapper objectMapper = objectMapperFactory.forWriting(); FilterProvider filterProvider = jmapResponse .getFilterProvider() .orElseGet(SimpleFilterProvider::new) .setDefaultFilter(SimpleBeanPropertyFilter.serializeAll()) .addFilter(PROPERTIES_FILTER, getPropertiesFilter(jmapResponse.getProperties())); objectMapper.setFilterProvider(filterProvider); return objectMapper; }
@RequestMapping("/{isbn}") public MappingJacksonValue findByIsbn(@PathVariable final String isbn) { final Book book = Checks.checkEntityExists(repo.findByIsbn(isbn), "No book found for isbn = " + isbn); final NewBookResource bookResource = new NewBookResource(book); bookResource.add(linkTo(methodOn(CartController.class).addNewBookToCart(bookResource)).withRel("add-to-cart")); final FilterProvider filterProvider = new SimpleFilterProvider().addFilter("bookFilter", SimpleBeanPropertyFilter.serializeAll()); final MappingJacksonValue wrapper = new MappingJacksonValue(bookResource); wrapper.setFilters(filterProvider); return wrapper; }
@Test public void writingJsonShouldWorkOnMessage() throws Exception { String expected = IOUtils.toString(ClassLoader.getSystemResource("json/message.json"), StandardCharsets.UTF_8); SimpleFilterProvider filterProvider = new SimpleFilterProvider() .addFilter(JmapResponseWriterImpl.PROPERTIES_FILTER, SimpleBeanPropertyFilter.serializeAll()) .addFilter(GetMessagesMethod.HEADERS_FILTER, SimpleBeanPropertyFilter.serializeAll()); String json = testee.forWriting() .setFilterProvider(filterProvider) .writeValueAsString(MESSAGE); assertThatJson(json) .when(IGNORING_ARRAY_ORDER) .isEqualTo(expected); } }
@Test public void processShouldReturnPropertyFilterWhenFilteringHeadersRequested() throws Exception { MessageManager inbox = mailboxManager.getMailbox(inboxPath, session); ComposedMessageId message1 = inbox.appendMessage( AppendCommand.from( org.apache.james.mime4j.dom.Message.Builder.of() .setFrom("user@domain.tld") .setField(new RawField("header1", "Header1Content")) .setField(new RawField("HEADer2", "Header2Content")) .setSubject("message 1 subject") .setBody("my message", StandardCharsets.UTF_8)), session); GetMessagesRequest request = GetMessagesRequest.builder() .ids(ImmutableList.of(message1.getMessageId())) .properties(ImmutableList.of("headers.from", "headers.heADER2")) .build(); List<JmapResponse> result = testee.process(request, clientId, session).collect(Collectors.toList()); assertThat(result) .hasSize(1) .extracting(JmapResponse::getFilterProvider) .are(new Condition<>(Optional::isPresent, "present")); SimpleFilterProvider actualFilterProvider = result.get(0).getFilterProvider().get(); ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setFilterProvider(actualFilterProvider.setDefaultFilter(SimpleBeanPropertyFilter.serializeAll())); String response = objectMapper.writer().writeValueAsString(result.get(0)); assertThat(JsonPath.parse(response).<Map<String, String>>read("$.response.list[0].headers")).containsOnly(MapEntry.entry("From", "user@domain.tld"), MapEntry.entry("HEADer2", "Header2Content")); }