<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/sources/baeldung/best-of/2025/05" -->

---
title: Best Baeldung posts — May 2025 | daily.dev
description: The most upvoted Baeldung posts from May 2025, curated by the daily.dev community.
canonical: https://daily.dev/sources/baeldung/best-of/2025/05
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:url: https://daily.dev/sources/baeldung/best-of/2025/05
og:type: website
og:site_name: daily.dev
og:title: Best Baeldung posts — May 2025 | daily.dev
og:description: The most upvoted Baeldung posts from May 2025, curated by the daily.dev community.
og:image: https://media.daily.dev/image/upload/s--VAY5ToZt--/f_auto/v1724209435/public/daily.dev%20-%20open%20graph
---

# Best of Baeldung — May 2025

1. 1  
[](https://daily.dev/posts/introduction-to-restheart-wciogkl16 "Introduction to RESTHeart")  
Article  
![Avatar of baeldung](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/52cccfb454d946c4b7dfa5e816f9e576)Baeldung · 1y  
Introduction to RESTHeart  
RESTHeart is a Java-based framework designed to build HTTP APIs on top of MongoDB, automatically exposing collections as REST and GraphQL endpoints. It offers CRUD operations, role-based access, and authentication out of the box with minimal setup, providing a zero-code solution. This tutorial guides on running RESTHeart locally or via Docker, setting up authentication, and performing CRUD operations both through REST and GraphQL APIs.  
56  
2
2. 2  
[](https://daily.dev/posts/stream-gatherers-in-java-phjuktyqe "Stream Gatherers in Java")  
Article  
![Avatar of baeldung](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/52cccfb454d946c4b7dfa5e816f9e576)Baeldung · 1y  
Stream Gatherers in Java  
Java 24 introduces the Gatherer interface, enhancing Java Stream APIs by allowing more flexible intermediate operations. Gatherers facilitate custom data transformations and support asynchronous processing. The article explores built-in Gatherers and demonstrates creating custom Gatherers for diverse input-output mappings, demonstrating how these can be used for one-to-one, one-to-many, many-to-one, and many-to-many relationships.  
30
3. 3  
[](https://daily.dev/posts/conditional-logging-with-logback-pda1vxmmj "Conditional Logging With Logback")  
Article  
![Avatar of baeldung](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/52cccfb454d946c4b7dfa5e816f9e576)Baeldung · 1y  
Conditional Logging With Logback  
Explore the conditional logging capabilities of the Logback framework, which allow dynamic control of log outputs based on runtime conditions. The post covers the setup using Maven dependencies, the use of conditional tags in configuration files, and practical implementations with system properties. It also discusses the EvaluatorFilter for runtime expression evaluation and offers alternatives such as Spring profiles and environment-specific variables for cleaner configuration.  
14
4. 4  
[](https://daily.dev/posts/flexible-pub-sub-messaging-with-spring-boot-and-dapr-f8h9im4ai "Flexible Pub/Sub Messaging With Spring Boot and Dapr")  
Article  
![Avatar of baeldung](https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/52cccfb454d946c4b7dfa5e816f9e576)Baeldung · 1y  
Flexible Pub/Sub Messaging With Spring Boot and Dapr  
Learn how to integrate Dapr with Spring Boot to create a flexible publish/subscribe messaging system. This approach decouples application code from specific message brokers, allowing seamless swapping without modifying code. The article provides a tutorial on setting up and testing a ride-hailing application, showcasing Dapr's capabilities for distributed messaging and the benefits of running tests locally using Testcontainers.  
11

[See all Baeldung archives](/sources/baeldung/best-of)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@graph":[{"@type":"CollectionPage","@id":"https://daily.dev/sources/baeldung/best-of/2025/05#page","url":"https://daily.dev/sources/baeldung/best-of/2025/05","name":"Best Baeldung Posts — May 2025","description":"The most upvoted Baeldung posts from May 2025, curated by the daily.dev community.","isPartOf":{"@type":"WebSite","url":"https://daily.dev"}},{"@type":"ItemList","@id":"https://daily.dev/sources/baeldung/best-of/2025/05#items","numberOfItems":4,"itemListElement":[{"@type":"ListItem","position":1,"url":"https://daily.dev/posts/introduction-to-restheart-wciogkl16","name":"Introduction to RESTHeart"},{"@type":"ListItem","position":2,"url":"https://daily.dev/posts/stream-gatherers-in-java-phjuktyqe","name":"Stream Gatherers in Java"},{"@type":"ListItem","position":3,"url":"https://daily.dev/posts/conditional-logging-with-logback-pda1vxmmj","name":"Conditional Logging With Logback"},{"@type":"ListItem","position":4,"url":"https://daily.dev/posts/flexible-pub-sub-messaging-with-spring-boot-and-dapr-f8h9im4ai","name":"Flexible Pub/Sub Messaging With Spring Boot and Dapr"}]},{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Sources","item":"https://daily.dev/sources"},{"@type":"ListItem","position":3,"name":"Baeldung","item":"https://daily.dev/sources/baeldung"},{"@type":"ListItem","position":4,"name":"Best of","item":"https://daily.dev/sources/baeldung/best-of"},{"@type":"ListItem","position":5,"name":"May 2025"}]}]}
```

