Generated by All in One SEO v4.8.9, this is an llms.txt file, used by LLMs to index the site. # Baeldung Membership ## Sitemaps - [XML Sitemap](https://www.baeldung.com/members/sitemap.xml): Contains all public & indexable URLs for this website. ## Posts - [Course - Thank You :)](https://www.baeldung.com/members/course-thank-you) - Thanks and Enjoy the Course Material You'll find your course over in My Courses. If you need to upgrade to All Access, you will find the link at the end of your current course. Click here to go to your profile → Click here to start browsing Baeldung → - [All Access - Thank You :)](https://www.baeldung.com/members/all-access-thank-you) - #Thanks and Enjoy the Material You'll find your course over in My Courses. Click here to go to your profile → Click here to start browsing Baeldung → ## Pages - [Baeldung Pro](https://www.baeldung.com/members/) - A regular reader? Definitely have a look at Baeldung Pro, get a clean, no-ads reading experience, dark-mode and quite a bit more. - [All Courses](https://www.baeldung.com/members/all-courses) - $127 Total Lessons 2 $347 Total Lessons 2 Total Lessons 77 Total Lessons 32 Total Lessons 4 Total Lessons 69 Total Lessons 45 Total Lessons 36 Total Lessons 26 Total Lessons 19 Total Lessons 21 Total Lessons 16 Total Lessons 29 Total Lessons 15 - [All Team Courses](https://www.baeldung.com/members/all-courses-team) - Team Total Lessons 1 Team Total Lessons 1 Team Total Lessons 1 Team Total Lessons 1 Team Total Lessons 1 Team Total Lessons 1 Team Total Lessons 1 Team Total Lessons 1 Team Total Lessons 1 Team Total Lessons 1 Team Total Lessons 1 - [Baeldung Pricing](https://www.baeldung.com/members/pricing) - A regular reader? Definitely have a look at Baeldung Pro, get a clean, no-ads reading experience, dark-mode and quite a bit more. - [Baeldung Pro FAQ](https://www.baeldung.com/members/baeldung-pro-faq) - Everything you might want to ask about Baeldung Pro. - [Baeldung Pro to Teachable](https://www.baeldung.com/members/baeldung-pro-to-teachable) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Baeldung Pro – Yearly - [Baeldung Pro Yearly to Lifetime](https://www.baeldung.com/members/baeldung-pro-yearly-to-lifetime) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Here’s the upgrade from Yearly to Lifetime 🙂 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Pro – Yearly to Lifetime $ 70 Lifetime Access to - [Baeldung Pro For Course Students](https://www.baeldung.com/members/baeldung-pro-for-course-students) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Baeldung Pro – Yearly - [Baeldung Team Package](https://www.baeldung.com/members/baeldung-pro-team) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily? Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! Yearly Lifetime Pro – 3 Members $ 67 Yearly Absolutely No Ads! Dark Mode IntelliJ Idea Ultimate (6 months free) Join (3) Cancelable any time 3 - [Subscriptions Main V2](https://www.baeldung.com/members/subscriptions-main-90201) - The best Baeldung reading experience. Finally, and entirelly ad-free. Pick the subscription, log in and, of course, cancel any time. You are already Subscribed to Baeldung Pro! Baeldung Pro FOR ONE YEAR $33 $ 27 Annually Unlimited Access to Baeldung with no Ads! SUBSCRIBE Cancelable any time NEW Baeldung Pro FOR ONE YEAR $33 $ - [Baeldung Yearly Team Package - BF](https://www.baeldung.com/members/baeldung-pro-yearly-team-bf) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! And here’s the lifetime option for Baeldung Pro – if that makes more sense than yearly Pro – 3 Members Original Price $67 $ 45 Yearly – - [Baeldung Pro Yearly to Lifetime - BF](https://www.baeldung.com/members/baeldung-pro-yearly-to-lifetime-bf) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Here’s the upgrade from Yearly to Lifetime 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Pro – Yearly - [Baeldung Pro to Teachable](https://www.baeldung.com/members/baeldung-pro-to-teachable-2) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Yearly Lifetime Baeldung Pro - [Baeldung Pro Team Yearly Package](https://www.baeldung.com/members/baeldung-pro-team-yearly-package) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2561 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. And here’s the lifetime - [Baeldung Pro Packages](https://www.baeldung.com/members/baeldung-pro-packages) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2561 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. And here’s the lifetime - [Baeldung Pro Lifetime For Course Students - BF](https://www.baeldung.com/members/baeldung-pro-lifetime-for-course-students-bf) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Baeldung Pro For Course - [Baeldung Pro Lifetime For Course Students](https://www.baeldung.com/members/baeldung-pro-lifetime-for-course-students-93999) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Baeldung Pro For Course - [Baeldung Pro Lifetime - BF](https://www.baeldung.com/members/baeldung-pro-lifetime-archived) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! Baeldung Pro Original Price $97 $ 65 Lifetime – 33% Off Access to Baeldung with absolutely no Ads! Dark Mode (new) IntelliJ Idea Ultimate (6 months free) - [Baeldung Pro For Course Students - BF](https://www.baeldung.com/members/baeldung-pro-for-course-students-bf) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Baeldung Pro For Course - [Baeldung Pro - Black Friday](https://www.baeldung.com/members/baeldung-pro) - A regular reader? Definitely have a look at Baeldung Pro, get a clean, no-ads reading experience, dark-mode and quite a bit more. - [Baeldung Lifetime Team Package - BF](https://www.baeldung.com/members/baeldung-pro-lifetime-team-bf) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! And here’s the yearly option for Baeldung Pro Pro – 3 Members Original Price $237 $ 159 Lifetime – 33% Off Absolutely No Ads! Dark Mode IntelliJ - [My Account](https://www.baeldung.com/members/account) - [Maintenance](https://www.baeldung.com/members/maintenance) - We are currently in maintenance for an hour Please check back shortly - [Baeldung Pro Course - Thank You :)](https://www.baeldung.com/members/baeldung-course-thank-you) - Thanks and Enjoy the Material You’ll find your course over in My Courses. Click here to go to your profile → Click here to start browsing Baeldung → - [Baeldung Pro Lifetime](https://www.baeldung.com/members/baeldung-pro-lifetime) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Baeldung Pro $ 97 - [Baeldung Pro](https://www.baeldung.com/members/membership) - A regular reader? Definitely have a look at Baeldung Pro, get a clean, no-ads reading experience, dark-mode and quite a bit more. - [Baeldung Pro Yearly For Course Students](https://www.baeldung.com/members/baeldung-pro-yearly-for-course-students) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily? Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Baeldung Pro For - [Baeldung Pro Yearly to Teachable](https://www.baeldung.com/members/baeldung-pro-yearly-to-teachable) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Baeldung Pro $ 27 - [Baeldung Pro Subscription - Thank You :)](https://www.baeldung.com/members/baeldung-pro-thank-you) - Thank You for Subscribing to Baeldung Pro. You can now enjoy Baeldung with: Absolutely no ads :-) in Dark Mode IntelliJ Idea Ultimate (6 months free license) Click here to go to your profile → Click here to start browsing Baeldung → - [Baeldung Pro Lifetime to Teachable](https://www.baeldung.com/members/baeldung-pro-lifetime-to-teachable) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Baeldung Pro $ 97 - [Baeldung Pro Lifetime For Course Students](https://www.baeldung.com/members/baeldung-pro-lifetime-for-course-students) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Baeldung Pro For Course - [My Courses](https://www.baeldung.com/members/my-courses) - [Registration Successful](https://www.baeldung.com/members/registration-successful) - Account registered. Please verify your email by clicking on the link sent to your email. - [Login](https://www.baeldung.com/members/login) - [Cart](https://www.baeldung.com/members/cart) - Remove item Thumbnail image Product Price Quantity Subtotal × Baeldung Starter Membership $ 45,00 / year Baeldung Starter Membership quantity $ 45,00 / year Update Cart Cart Totals Subtotal $ 45,00 Total $ 45,00 Recurring totals Subtotal $ 45,00 / year Recurring total $ 45,00 / yearFirst renewal: July 17, 2025 Proceed to Checkout - [Shop](https://www.baeldung.com/members/shop) - [Products](https://www.baeldung.com/members/products) - [Registration](https://www.baeldung.com/members/registration) ## My Templates - [spring_sale_timer](https://www.baeldung.com/members/?elementor_library=spring_sale_timer) - All Courses are 35% of till 18th Aug, 2025 Days Hours Minutes Seconds - [Seats Left Counter](https://www.baeldung.com/members/?elementor_library=seats-left-counter) - 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. - [Yellow-tick-img](https://www.baeldung.com/members/?elementor_library=yellow-tick-img) - [Heading-5](https://www.baeldung.com/members/?elementor_library=heading-5) - Dedicated course pricing - [Bottom section Pro feature](https://www.baeldung.com/members/?elementor_library=bottom-section-pro-feature) - Ad-free experience Pro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark Mode Enjoy dark mode, our second most requested feature. Along with no ads, this is finally the ideal learning and reading experience on Baeldung. IntelliJ IDEA Ultimate – - [Baeldung Pro](https://www.baeldung.com/members/?elementor_library=baeldung-pro) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. Yearly Lifetime Baeldung Pro - [Pro Testimonial](https://www.baeldung.com/members/?elementor_library=pro-testimonial) - I use baeldung almost on a daily basis with my job and I really enjoy your courses and hope to support the site. I am also excited for the new features that are coming down the pipeline in the future. Evan Schweitzer I joined because I’ve been using an ad blocker but I really appreciate - [Heading-7-Description](https://www.baeldung.com/members/?elementor_library=heading-7-description) - Pro members will be able to get access to the Pro only eBooks. - [Heading-7](https://www.baeldung.com/members/?elementor_library=heading-7) - Pro Only eBooks - [Heading-4](https://www.baeldung.com/members/?elementor_library=heading-4) - Members Code - [Heading-3](https://www.baeldung.com/members/?elementor_library=heading-3) - IntelliJ IDEA Ultimate – a 6 months free license - [Pro Testimonials](https://www.baeldung.com/members/?elementor_library=pro-testimonials-2) - I use baeldung almost on a daily basis with my job and I really enjoy your courses and hope to support the site. I am also excited for the new features that are coming down the pipeline in the future. Evan Schweitzer I joined because I’ve been using an ad blocker but I really appreciate - [ppp_message](https://www.baeldung.com/members/?elementor_library=ppp_message) - [Yearly/Lifetime](https://www.baeldung.com/members/?elementor_library=yearly-lifetime) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! Yearly Lifetime Pro – 3 Members $ 67 Yearly Absolutely No Ads! Dark Mode IntelliJ Idea Ultimate (6 months free) Join (3) Cancelable any time 3 Pro - [Yearly to Lifetime update](https://www.baeldung.com/members/?elementor_library=yearly-to-lifetime-update) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2365 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. And here’s the lifetime option - [Seats Left Section](https://www.baeldung.com/members/?elementor_library=seats-left-section) - 2214 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. - [Bottom section-Pro](https://www.baeldung.com/members/?elementor_library=bottom-section-pro) - Ad-free experience Pro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark Mode Enjoy dark mode, our second most requested feature. Along with no ads, this is finally the ideal learning and reading experience on Baeldung. IntelliJ IDEA Ultimate - - [Pricing table pro](https://www.baeldung.com/members/?elementor_library=pricing-table-pro) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! And here’s the lifetime option for Baeldung Pro – if that makes more sense than yearly Baeldung Pro $ 237 Lifetime $79/person Access to Baeldung with absolutely - [Heading-6-Description](https://www.baeldung.com/members/?elementor_library=heading-6-description) - Pro members will be able to follow the categories and tags they’re interested in, only, to make sure they get tailored updates on these only. - [Heading-6](https://www.baeldung.com/members/?elementor_library=heading-6) - Follow specific Categories and Tags (upcoming) - [Heading-5-Description](https://www.baeldung.com/members/?elementor_library=heading-5-description) - Pro members will be able to upgrade to the courses at dedicated (naturally lower) price-point. - [Heading-4-Description](https://www.baeldung.com/members/?elementor_library=heading-4-description) - Pro members will have access to the curated codebase on some of our advanced articles. - [Heading-3-Description](https://www.baeldung.com/members/?elementor_library=heading-3-description) - With the help of JetBrains, a free 6-month intelliJ IDEA Ultimate license is also part of Pro. - [Heading-2-Description](https://www.baeldung.com/members/?elementor_library=heading-2-description) - Enjoy dark mode, our second most requested feature. Along with no ads, this is finally the ideal learning and reading experience on Baeldung. - [Heading-2](https://www.baeldung.com/members/?elementor_library=heading-2) - Dark Mode - [Heading-1-Description](https://www.baeldung.com/members/?elementor_library=heading-1-description) - Pro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. - [Green-tick-img](https://www.baeldung.com/members/?elementor_library=green-tick-img) - [Heading-1](https://www.baeldung.com/members/?elementor_library=heading-1) - Ad-free experience - [Team packages for the pro](https://www.baeldung.com/members/?elementor_library=team-packages-for-the-pro-2) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2561 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. And here’s the lifetime - [Team packages for the pro](https://www.baeldung.com/members/?elementor_library=team-packages-for-the-pro) - Become a member, log in and, of course, cancel any time. Reading Baeldung almost daily?Finally, a clean, ad-free reading experience 🙂 You are already Subscribed to Baeldung Pro! 2561 early-adopter seats left out of 3000 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. And here’s the lifetime - [pro-features-list-template](https://www.baeldung.com/members/?elementor_library=pro-features-list-template) - /*! elementor – v3.23.0 – 05-08-2024 */ .elementor-widget-image{text-align:center}.elementor-widget-image a{display:inline-block}.elementor-widget-image a img[src$=”.svg”]{width:48px}.elementor-widget-image img{vertical-align:middle;display:inline-block} /*! elementor – v3.23.0 – 05-08-2024 */ .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px} Ad-free experience Pro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark Mode (new) - [faq link template](https://www.baeldung.com/members/?elementor_library=faq-link-template) - /*! elementor – v3.23.0 – 05-08-2024 */ .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px} The most common questions, answered –> - [FAQ Page Template](https://www.baeldung.com/members/?elementor_library=faq-page-template) - /*! elementor – v3.23.0 – 05-08-2024 */ .elementor-heading-title{padding:0;margin:0;line-height:1}.elementor-widget-heading .elementor-heading-title[class*=elementor-size-]>a{color:inherit;font-size:inherit;line-height:inherit}.elementor-widget-heading .elementor-heading-title.elementor-size-small{font-size:15px}.elementor-widget-heading .elementor-heading-title.elementor-size-medium{font-size:19px}.elementor-widget-heading .elementor-heading-title.elementor-size-large{font-size:29px}.elementor-widget-heading .elementor-heading-title.elementor-size-xl{font-size:39px}.elementor-widget-heading .elementor-heading-title.elementor-size-xxl{font-size:59px} Learn Spring Course FAQ /*! elementor – v3.23.0 – 05-08-2024 */ .elementor-toggle{text-align:start}.elementor-toggle .elementor-tab-title{font-weight:700;line-height:1;margin:0;padding:15px;border-bottom:1px solid #d5d8dc;cursor:pointer;outline:none}.elementor-toggle .elementor-tab-title .elementor-toggle-icon{display:inline-block;width:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon svg{margin-inline-start:-5px;width:1em;height:1em}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-right{float:right;text-align:right}.elementor-toggle .elementor-tab-title .elementor-toggle-icon.elementor-toggle-icon-left{float:left;text-align:left}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-closed{display:block}.elementor-toggle .elementor-tab-title .elementor-toggle-icon .elementor-toggle-icon-opened{display:none}.elementor-toggle .elementor-tab-title.elementor-active{border-bottom:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-closed{display:none}.elementor-toggle .elementor-tab-title.elementor-active .elementor-toggle-icon-opened{display:block}.elementor-toggle .elementor-tab-content{padding:15px;border-bottom:1px solid #d5d8dc;display:none}@media (max-width:767px){.elementor-toggle .elementor-tab-title{padding:12px}.elementor-toggle .elementor-tab-content{padding:12px - [seats left](https://www.baeldung.com/members/?elementor_library=seats-left) - 2421 early-adopter seats left out of 2500 at the current $27 pricing. After that, the price of Baeldung Pro will stay at $33. - [Default Kit](https://www.baeldung.com/members/?elementor_library=default-kit) - [LearnDash Single Topic](https://www.baeldung.com/members/?elementor_library=learndash-single-topic) - [LearnDash Single Quiz](https://www.baeldung.com/members/?elementor_library=learndash-single-quiz) - [LearnDash Single Lesson](https://www.baeldung.com/members/?elementor_library=learndash-single-lesson) - [LearnDash Single Course](https://www.baeldung.com/members/?elementor_library=learndash-single-course) ## Products - [Baeldung All Access (Lifetime) - For Course Students](https://www.baeldung.com/members/product/baeldung-all-access-lifetime-for-course-students) - [Baeldung All Access (Yearly) - For Course Students](https://www.baeldung.com/members/product/baeldung-all-access-yearly-for-course-students) - [Baeldung All Access (Yearly) - For Pro Students](https://www.baeldung.com/members/product/baeldung-all-access-yearly-for-pro-students) - [Baeldung All Access (Yearly)](https://www.baeldung.com/members/product/baeldung-all-access-yearly) - [Baeldung All Access (Lifetime)](https://www.baeldung.com/members/product/baeldung-all-access-lifetime) - [Learn Spring Security (retired)](https://www.baeldung.com/members/product/learn-spring-security) - [Learn Maven (retired)](https://www.baeldung.com/members/product/learn-maven) - [Learn Spring (retired)](https://www.baeldung.com/members/product/learn-spring) - [Baeldung All Access (Lifetime) - For Pro Students](https://www.baeldung.com/members/product/baeldung-all-access-lifetime-for-pro-students) - [Baeldung - Register](https://www.baeldung.com/members/product/baeldung-register) - [Baeldung All Access (Yearly) - Summer Sale](https://www.baeldung.com/members/product/baeldung-all-access-yearly-summer-sale) - [Baeldung All Access (Lifetime) - Summer Sale](https://www.baeldung.com/members/product/baeldung-all-access-lifetime-summer-sale) - [Learn Spring Data JPA](https://www.baeldung.com/members/product/learn-spring-data-jpa) - [Baeldung Pro Team Lifetime - Summer Sale](https://www.baeldung.com/members/product/baeldung-pro-team-lifetime-summer-sale) - Baeldung Pro Team Lifetime - Summer Sale - [Baeldung Pro Yearly Subscription (Teachable)](https://www.baeldung.com/members/product/baeldung-pro-subscription-teachable) - Baeldung Pro Subscription (Teachable) - [Baeldung Pro Team Yearly - Summer Sale](https://www.baeldung.com/members/product/baeldung-pro-team-yearly-summer-sale) - Baeldung Pro Team Yearly - [Baeldung Pro Lifetime Subscription - Summer Sale](https://www.baeldung.com/members/product/baeldung-pro-lifetime-subscription-summer-sale) - Baeldung Pro Lifetime Subscription - [Baeldung Pro Yearly Subscription - Summer Sale](https://www.baeldung.com/members/product/baeldung-pro-yearly-subscription-summer-sale) - Baeldung Pro Subscription 1. No ADS - [Baeldung All Team Access (Lifetime) - Summer Sale](https://www.baeldung.com/members/product/baeldung-all-team-access-lifetime-summer-sale) - [Baeldung All Team Access (Yearly) - Summer Sale](https://www.baeldung.com/members/product/baeldung-all-team-access-yearly-summer-sale) - [Learn JUnit (retired)](https://www.baeldung.com/members/product/learn-junit-course) - [Baeldung All Team Access (Yearly)](https://www.baeldung.com/members/product/baeldung-all-team-access-yearly) - [Baeldung All Team Access (Lifetime)](https://www.baeldung.com/members/product/baeldung-all-team-access-lifetime) - [Learn JUnit for Teams](https://www.baeldung.com/members/product/learn-junit-for-teams) - [Learn Spring for Teams](https://www.baeldung.com/members/product/learn-spring-for-teams) - [Baeldung Pro Lifetime Subscription - Black Friday](https://www.baeldung.com/members/product/baeldung-pro-lifetime-subscription-bf) - Baeldung Pro Lifetime Subscription - [Baeldung Pro Lifetime Subscription - Spring Sale](https://www.baeldung.com/members/product/baeldung-pro-lifetime-subscription-spring-sale) - Baeldung Pro Lifetime Subscription - [Baeldung Pro Yearly Subscription - Spring Sale](https://www.baeldung.com/members/product/baeldung-pro-yearly-subscription-spring-sale) - Baeldung Pro Subscription 1. No ADS - [Baeldung Pro Lifetime Subscription (Teachable)](https://www.baeldung.com/members/product/baeldung-pro-lifetime-subscription-teachable) - Baeldung Pro Lifetime Subscription (Teachable) - [Baeldung Pro Lifetime Subscription](https://www.baeldung.com/members/product/baeldung-pro-lifetime-subscription) - Baeldung Pro Lifetime Subscription - [Baeldung Pro Yearly Subscription](https://www.baeldung.com/members/product/no-ads-subscription) - Baeldung Pro Subscription 1. No ADS - [Baeldung Pro Yearly Subscription - Black Friday](https://www.baeldung.com/members/product/baeldung-pro-subscription-bf) - Baeldung Pro Subscription 1. No ADS - [Baeldung Pro - Upgrade to Lifetime - Spring Sale](https://www.baeldung.com/members/product/baeldung-pro-upgrade-to-lifetime-spring-sale) - Baeldung Pro Yearly to Lifetime - [Baeldung Pro Team Yearly](https://www.baeldung.com/members/product/baeldung-pro-team-yearly) - Baeldung Pro Team Yearly - [Baeldung Pro Team Lifetime](https://www.baeldung.com/members/product/baeldung-pro-team-lifetime) - Baeldung Pro Team Lifetime - [Baeldung Pro - Upgrade to Lifetime](https://www.baeldung.com/members/product/baeldung-pro-yearly-to-lifetime) - Baeldung Pro Yearly to Lifetime ## Courses - [Learn JSON With Jackson](https://www.baeldung.com/members/courses/learn-json-with-jackson) - [Learn Java Collections](https://www.baeldung.com/members/courses/learn-java-collections) - [Learn Mockito](https://www.baeldung.com/members/courses/learn-mockito) - [Learn Hibernate and JPA](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa) - [Learn Maven](https://www.baeldung.com/members/courses/learn-maven) - [Learn JUnit](https://www.baeldung.com/members/courses/learn-junit) - [Learn Spring Data JPA](https://www.baeldung.com/members/courses/learn-spring-data-jpa) - [Learn Spring Security OAuth](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course) - [Learn Spring Security Core](https://www.baeldung.com/members/courses/learn-spring-security-core) - The definitive video guide to secure your Java application - [Learn Spring Security](https://www.baeldung.com/members/courses/learn-spring-security) - The definitive video guide to secure your Java application - [REST With Spring Boot](https://www.baeldung.com/members/courses/rest-with-spring-boot) - [Learn Spring](https://www.baeldung.com/members/courses/learn-spring) - from no experience to actually building stuff - [Baeldung All Access (Yearly)](https://www.baeldung.com/members/courses/baeldung-all-access-yearly) - [Baeldung All Access (Lifetime)](https://www.baeldung.com/members/courses/baeldung-all-access-lifetime) - [Baeldung Pro Welcome - Lifetime](https://www.baeldung.com/members/courses/baeldung-pro-welcome-lifetime) - Welcome to Baeldung Pro - Lifetime - [Baeldung All Team Access (Yearly)](https://www.baeldung.com/members/courses/baeldung-all-team-access-yearly) - [REST With Spring Boot for Teams](https://www.baeldung.com/members/courses/rest-with-spring-boot-for-teams) - [Learn Mockito for Teams](https://www.baeldung.com/members/courses/learn-mockito-for-teams) - [Learn Maven for Teams](https://www.baeldung.com/members/courses/learn-maven-for-teams) - [Learn JUnit for Teams](https://www.baeldung.com/members/courses/learn-junit-for-teams) - [Learn Spring Data JPA for Teams](https://www.baeldung.com/members/courses/learn-spring-data-jpa-for-teams) - [Learn Spring Security OAuth for Teams](https://www.baeldung.com/members/courses/learn-spring-security-oauth-for-teams) - [Learn Spring Security Core for Teams](https://www.baeldung.com/members/courses/learn-spring-security-core-for-teams) - [Learn Spring Security for Teams](https://www.baeldung.com/members/courses/learn-spring-security-for-teams) - [Learn Spring for Teams](https://www.baeldung.com/members/courses/learn-spring-for-teams) - [Baeldung All Team Access (Lifetime)](https://www.baeldung.com/members/courses/baeldung-all-team-access-lifetime) - [Baeldung Pro Welcome - Yearly](https://www.baeldung.com/members/courses/baeldung-pro-welcome) - Welcome to Baeldung Pro - Yearly ## Lessons - [Lesson7: anyMatch(), allMatch(), noneMatch()](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson7-anymatch-allmatch-nonematch) - 1. Overview The anyMatch(), allMatch(), and noneMatch() methods are terminal operations used to check if a stream's elements meet a certain condition. Unlike other terminal operations such as collect() or forEach(), they don't produce a new collection or perform an action on each element. Instead, they return a single boolean value. These are short-circuiting terminal - [Lesson 3: Log4j2 Appenders and Layouts](https://www.baeldung.com/members/courses//lessons/lesson-3-log4j2-appenders-and-layouts) - 1. Overview In this lesson, we'll learn about Appenders and Layouts in Log4j 2 and explore how they enable us to control our application's logs. The relevant module we need to import when starting this lesson is: log4j2-appenders-and-layouts-start. If we want to reference the fully implemented lesson, we can import: log4j2-appenders-and-layouts-end. 2. What Are Appenders and Layouts? - [Lesson 3: Statements and Operators](https://www.baeldung.com/members/courses//lessons/lesson-3-statements-and-operators) - 1. Overview Now that we are familiar with variables and data types, it's time to learn how to make our programs do things. This involves writing instructions and performing operations, which are the core of any application. In this lesson, we'll explore how Java code is built and executed at the most basic level: expressions, - [Lesson 7: Using JSON Views](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-7-using-json-views) - 1. Overview In this lesson, we'll explore Jackson's @JsonView annotation, its purpose, and how it allows us to define multiple serialization views for the same object. The relevant module we need to import when starting this lesson is using-json-views-start. If we want to reference the fully implemented lesson, we can import using-json-views-end. 2. The @JsonView - [Lesson 7: Legacy Collection](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-7-legacy-collection) - 1. Overview In this lesson, we’ll explore some of the legacy collection classes in Java. These classes were part of the Collections Framework in its early days but are no longer recommended for modern code. Specifically, we’ll look at Vector, Stack, and Hashtable. We’ll see how each of them works, why they’ve fallen out of - [Lesson 4: Overview of Queues](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-4-overview-of-queues) - 1. Overview Queues are part of the Java Collections Framework and, simply put, are designed to hold elements that wait to be processed in a specific order. In this lesson, we’ll explore the Queue interface, its core behaviors, and common implementations like LinkedList, ArrayDeque, and PriorityQueue. The relevant module we need to import when working - [Course Changelog](https://www.baeldung.com/members/courses/learn-java-streams/lessons/course-changelog-10) - We're committed to offering a high-quality and valuable course. For this, we're constantly upgrading and improving the content and adding new material to the curriculum. Furthermore, we compile our code targeting one of the latest Java LTS versions to take advantage of the new language features. You should check which version we're currently pointing to - [Lesson 1: Custom Property Names and Order](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-1-custom-property-names-and-order) - 1. Overview When working with external APIs, we often need to adapt our JSON structure to match specific naming conventions or formatting requirements. Jackson provides several annotations that allow us to customize how our Java objects are represented in JSON. In this lesson, we'll learn how to use @JsonProperty, @JsonPropertyOrder, and @JsonValue to rename properties, - [Troubleshooting and How to Ask for Support](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/troubleshooting-and-how-to-ask-for-support-3) - 1. Goal This lesson should guide you whenever you experience issues with the course material, presenting effective troubleshooting techniques to resolve them. 2. Common Issues and Solutions Here we’ll present some common issues you might encounter throughout the course. 2.1. I Can’t Find the Repository of the Course This information is included in Module 0 - [Troubleshooting and How to Ask for Support](https://www.baeldung.com/members/courses/learn-junit/lessons/troubleshooting-and-how-to-ask-for-support) - Common Issues and Solutions Here we’ll present some common issues you might encounter throughout the course. 1. I Can’t Find the Repository of the Course This information is included in Module 0 of the course. Please take a brief moment to go over that content, as it might help you efficiently start the course, and - [Troubleshooting and How to Ask for Support](https://www.baeldung.com/members/courses/learn-maven/lessons/troubleshooting-and-how-to-ask-for-support-2) - Common Issues and Solutions Here we’ll present some common issues you might encounter throughout the course. 1. I Can’t Find the Repository of the Course This information is included in Module 0 of the course. Please take a brief moment to go over that content, as it might help you efficiently start the course, and - [Troubleshooting and How to Ask for Support](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/troubleshooting-and-how-to-ask-for-support-4) - 1. Goal This lesson should guide you whenever you experience issues with the course material, presenting effective troubleshooting techniques to resolve them. 2. Common Issues and Solutions Here we’ll present some common issues you might encounter throughout the course. 2.1. I Can’t Find the Repository of the Course This information is included in Module 0 - [Troubleshooting and How to Ask for Support](https://www.baeldung.com/members/courses/learn-spring/lessons/troubleshooting-and-how-to-ask-for-support-5) - 1. Goal This lesson should guide you whenever you experience issues with the course material, presenting effective troubleshooting techniques to resolve them. 2. Common Issues and Solutions Here we’ll present some common issues you might encounter throughout the course. 2.1. I Can’t Find the Repository of the Course This information is included in Module 0 - [Troubleshooting and How to Ask for Support](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/troubleshooting-and-how-to-ask-for-support-6) - 1. Goal This lesson should guide you whenever you experience issues with the course material, presenting effective troubleshooting techniques to resolve them. 2. Common Issues and Solutions Here we’ll present some common issues you might encounter throughout the course. 2.1. I Can’t Find the Repository of the Course This information is included in Module 0 - [Troubleshooting and How to Ask for Support](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/troubleshooting-and-how-to-ask-for-support-7) - Common Issues and Solutions Here we’ll present some common issues you might encounter throughout the course. 1. I Can’t Find the Repository of the Course This information is included in Module 0 of the course. Please take a brief moment to go over that content, as it might help you efficiently start the course, and - [Troubleshooting and How to Ask for Support](https://www.baeldung.com/members/courses/learn-mockito/lessons/troubleshooting-and-how-to-ask-for-support-8) - Common Issues and Solutions Here we’ll present some common issues you might encounter throughout the course. 1. I Can’t Find the Repository of the Course This information is included in Module 0 of the course. Please take a brief moment to go over that content, as it might help you efficiently start the course, and - [Troubleshooting and How to Ask for Support](https://www.baeldung.com/members/courses/learn-java-streams/lessons/troubleshooting-and-how-to-ask-for-support-9) - Common Issues and Solutions Here we’ll present some common issues you might encounter throughout the course. 1. I Can’t Find the Repository of the Course This information is included in Module 0 of the course. Please take a brief moment to go over that content, as it might help you efficiently start the course, and - [Troubleshooting and How to Ask for Support](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/troubleshooting-and-how-to-ask-for-support-11) - Common Issues and Solutions Here we’ll present some common issues you might encounter throughout the course. 1. I Can’t Find the Repository of the Course This information is included in Module 0 of the course. Please take a brief moment to go over that content, as it might help you efficiently start the course, and - [Troubleshooting and How to Ask for Support](https://www.baeldung.com/members/courses/learn-java-collections/lessons/troubleshooting-and-how-to-ask-for-support-10) - Common Issues and Solutions Here we’ll present some common issues you might encounter throughout the course. 1. I Can’t Find the Repository of the Course This information is included in Module 0 of the course. Please take a brief moment to go over that content, as it might help you efficiently start the course, - [Lesson 6: findFirst(), findAny()](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-6-findfirst-findany) - 1. Overview When working with streams, we often need to retrieve just one element that matches certain criteria — for example, the first one, or simply any matching record. This is where the findFirst() and findAny() terminal operators come into play. The relevant module we need to import when starting this lesson is: find-first-find-any-start. If - [Lesson 4: Log4j2 Filters](https://www.baeldung.com/members/courses//lessons/lesson-4-log4j2-filters) - 1. Overview We've already seen in previous lessons how to control the amount of logs our application generates by configuring a default severity level. While this approach works well for basic filtering, we often need more control over our log output. In this lesson, we'll explore what Filters in Log4j 2 are and how they - [Lesson 5: Concurrent Collections](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-5-concurrent-collections) - 1. Overview In any modern applications, running tasks in parallel is a must, of course. For example, serving multiple users on a server, downloading files while processing data, or updating the interface while background work continues. In a single-threaded program, collections are safe because only one piece of code can modify them at a time. - [Lesson 3: Generics: A Quick Primer](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-3-generics-a-quick-primer) - 1. Overview Generics in Java let us define classes, interfaces, and methods with type parameters, enabling type-safe and more readable code. In this lesson, we’ll see how generics make collections more robust, how type parameters work, and why raw types should be avoided. The relevant module we need to import when starting this lesson is: - [lesson 2: The Collections Class](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-the-collections-class) - 1. Overview In this lesson, we'll dive into the java.util.Collections class, a core utility designed to simplify everyday operations on Java collections. We'll cover essential static methods, such as sorting, reversing, and binary searching, and also examine practical examples and best practices for utilizing these methods. The relevant module we need to import when starting - [Lesson 2: Basic ArrayList Operations](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-basic-arraylist-operations) - 1. Overview Let's continue working with ArrayList by focusing on its most common operations. In this lesson, we'll see how to add, retrieve, update, remove, and display elements in an ArrayList. We'll build a simple JUnit test class as we go along, incrementally adding test methods to illustrate each operation. The relevant module we need - [Changelog](https://www.baeldung.com/members/courses/learn-java-collections/lessons/changelog-2) - We're committed to offering a high-quality and valuable course. For this, we're constantly upgrading and improving the content and adding new material to the curriculum. Furthermore, we compile our code targeting one of the latest Java LTS versions to take advantage of the new language features. You should check which version we're currently pointing - [Lesson 1: Sequenced Collections](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-sequenced-collections) - 1. Overview The Java collections framework lacks a unified interface for accessing elements in a defined, encounter order across different collection types. In this lesson, we'll explore how Java 21's Sequenced Collections solves the problem of inefficient, inconsistent, and incomplete APIs. The relevant module we need to import when starting this lesson is: sequenced-collections-start. If - [Lesson 2: Loops and Iteration](https://www.baeldung.com/members/courses//lessons/lesson-2-loops-and-iteration) - 1. Overview Any real-world implementation will need to repeat actions—counting items, processing lists, retrying operations—without having to duplicate code. Loops let us run a block of code multiple times, either a set number of times or while a condition remains true. This lesson introduces this core concept in Java - the various types of loops, - [Lesson 2: Basic HashMap Operations](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-basic-hashmap-operations) - 1. Overview After initializing a HashMap, we can perform a variety of basic operations to manage its key-value pairs. In this lesson, we’ll cover how to add, retrieve, update, and remove entries, as well as check whether a specific key or value exists. All the operations we’ll explore in this lesson are defined in the - [Lesson 3: Sorting Collections with Comparable and Comparator](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-3-sorting-collections-with-comparable-and-comparator) - 1. Overview Java provides two powerful interfaces, Comparable and Comparator, to help us sort objects effectively. In this lesson, we'll explore these interfaces in-depth and understand how to use each one in different scenarios. The relevant module we need to import when starting this lesson is: sorting-collections-start. If we want to reference the fully implemented - [Lesson 1: From Arrays to Collections](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-from-arrays-to-collections) - 1. Overview Java Collections allow us to store, manage, and manipulate groups of objects effectively. Collections are fundamental to almost every Java application, making them essential to master. In this lesson, we'll explore the core purpose and significance of Java Collections. And we'll start doing that by having a look at the limitations of basic - [Lesson 5: Introduction to the Jackson Streaming API](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-5-introduction-to-the-jackson-streaming-api) - 1. Overview In this lesson, we'll look at how to read and write JSON content programmatically using Jackson's Streaming API. The relevant module we need to import when starting this lesson is: the-jackson-streaming-api-start. If we want to reference the fully implemented lesson, we can import: the-jackson-streaming-api-end. 2. Why Use the Streaming API? Compared to the - [Course Changelog](https://www.baeldung.com/members/courses/learn-mockito/lessons/course-changelog-9) - We're committed to offering a high-quality and valuable course. For this, we're constantly upgrading and improving the content and adding new material to the curriculum. Furthermore, we compile our code targeting one of the latest Java LTS versions to take advantage of the new language features. You should check which version we're currently pointing to - [Course Changelog](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/course-changelog-8) - We're committed to offering a high-quality and valuable course. For this, we're constantly upgrading and improving the content and adding new material to the curriculum. Furthermore, we compile our code targeting one of the latest Java LTS versions to take advantage of the new language features. You should check which version we're currently pointing to - [Lesson 4: limit(), skip()](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-4-limit-skip) - 1. Overview We often need to work with a slice of a dataset. Streams give us two operations for this: limit(n) and skip(n), which we can use on their own or together to describe the exact window of elements we want to process. In this lesson, we will learn about these operations using real-world examples, - [Lesson 2: Intermediate and Terminal Operations](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-2-intermediate-and-terminal-operations) - 1. Overview In this lesson, we’ll understand the main differences between intermediate and terminal operations in streams. We’ll learn about the Stream’s lazy evaluation feature. Finally, we’ll see that streams are closed upon consumption and cannot be reused. The relevant module we need to import when starting this lesson is: intermediate-and-terminal-operations-start. If we want to - [Lesson 2: Functional Interfaces and Lambdas in Java](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-3-functional-interfaces-and-lambdas-in-java) - 1. Overview Java’s support for functional-style programming begins with two essential features: functional interfaces and lambda expressions. These constructs let us express behavior as values and pass it around with minimal boilerplate - a pattern that’s particularly powerful when working with the Streams API. In this lesson, we’ll understand what functional interfaces are, explore the - [Lesson 2: toMap(), toList(), toSet()](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-2-tomap-tolist-toset) - 1. Overview When processing data with streams, we often want to gather the results back into a collection so they can be reused, stored, or passed around in the rest of the application. In this lesson, we'll explore the most common ways to collect a stream into a List, Set, or Map. We’ll also see - [Lesson 5: count(), average(), min(), max()](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-5-count-average-min-max) - 1. Overview The count(), min(), and max() methods are simple yet powerful terminal operations that provide basic data aggregation from a stream. These methods provide an efficient way to obtain summary statistics without requiring custom collectors. The relevant module we need to import when starting this lesson is: count-min-max-start. If we want to reference the - [Lesson 3: Handling Unknown Properties](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-3-handling-unknown-properties) - 1. Overview When working with external APIs or evolving systems, JSON data often changes over time, with new fields appearing in responses. If not handled properly, these differences can cause deserialization to fail and interrupt the data flow. In this lesson, we’ll explore how to make applications more resilient to such cases by using the - [Lesson 3: ObjectMapper Configuration](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-3-objectmapper-configuration) - 1. Overview Jackson's ObjectMapper class is the easiest way to parse JSON in Java. Eventually, we may want to tweak how JSON is produced or parsed, make it easier to read, tolerate extra fields, pick a different date format, or change the naming style of properties. These adjustments are common in many day-to-day tasks, especially - [Course Changelog](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/course-changelog-11) - We're committed to offering a high-quality and valuable course. For this, we're constantly upgrading and improving the content and adding new material to the curriculum. Furthermore, we compile our code targeting one of the latest Java LTS versions to take advantage of the new language features. You should check which version we're currently pointing to - [Mindset and How to Go Through the Course Material](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/mindset-and-how-to-go-through-the-course-material-11) - After more than a decade of creating courses for students, naturally, I see different ways students learn. Start-to-finish First, there are the students who, after investing in the course, are committed to learning and using the material in their work. They start at Module 1 - Lesson 1 and work their way through the full - [Lesson 1: Conditional Statements](https://www.baeldung.com/members/courses//lessons/lesson-1-conditional-statements) - 1. Overview Programs seldon run in a straight line, start to finish. Often, they need to make decisions and follow different paths depending on certain conditions. This is what we call control flow. In this lesson, we’ll explore conditional statements, the primary way to control the flow of execution in Java. To follow along with - [Lesson 2: Variables and Data Types](https://www.baeldung.com/members/courses//lessons/lesson-2-variables-and-data-types) - 1. Overview In this lesson, we'll explore the concept of creating variables and using them in a practice example. Variables are one of the fundamental building blocks of any programming language, as they act as containers that hold data that can be used and modified throughout a program. We'll begin with a brief introduction to - [Lesson 6: Custom Serialization and Deserialization (upcoming)](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-6-custom-serialization-and-deserialization-upcoming) - [Lesson 2: Introduction to Java Util Logging (JUL)](https://www.baeldung.com/members/courses//lessons/lesson-2-introduction-to-java-util-logging-jul) - 1. Overview Java Util Logging (JUL) is a built-in logging framework provided directly by the Java Development Kit (JDK). It offers straightforward logging capabilities without requiring additional external dependencies. In this lesson, we'll explore the basics of JUL, including obtaining loggers, sending log messages at different levels, and its default behavior. Finally, we'll discuss its - [Lesson 3: LinkedHashSet: Preserving Insertion Order](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-3-linkedhashset-preserving-insertion-order) - 1. Overview In Java, we often need a collection that prevents duplicate elements, just like a HashSet. But what if we also care about the order in which elements were inserted? This is where LinkedHashSet comes in. In this lesson, we'll learn about the characteristics of LinkedHashSet through examples. The relevant module we need to import - [Lesson 3: Bulk Operations on Lists](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-3-bulk-operations-on-lists) - 1. Overview In this lesson, we’ll explore how to work with multiple elements at once in a list. Instead of handling items one by one, we’ll learn how to perform operations that affect groups of elements efficiently and concisely. These bulk operations make list manipulation more expressive and often more performant, especially when dealing with - [Lesson 4: TreeSet: Sorted Set and Natural Ordering](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-4-treeset-sorted-set-and-natural-ordering) - 1. Overview There are situations where, in addition to enforcing uniqueness, we also need a Set that maintains its elements in a defined sorted order. In this lesson, we’ll explore how TreeSet addresses this scenario, see how it works, review examples of its use, and discuss both its strengths and limitations. The relevant module we - [Lesson 2: Overview of the Java Collections Framework](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-overview-of-the-java-collections-framework) - 1. Overview Let’s now take a step back and have a high-level look at the Java Collections Framework. We’ve already seen why collections are essential, and now we’ll go one step further by exploring their high-level structure. We’ll discuss the core interfaces and go over some of the most common implementations to understand how everything - [Lesson 1: Enhanced For-Loops: A Simple Iteration Technique](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-enhanced-for-loops-a-simple-iteration-technique) - 1. Overview In this lesson, we'll focus on a common and straightforward approach for iterating over collections: the enhanced for-loop, also known as the for-each loop. The relevant module we need to import when starting this lesson is: enhanced-for-loops-start. If we want to reference the fully implemented lesson, we can import: enhanced-for-loops-end. 2. Traditional Index-Based - [Lesson 3: Iterating Over HashMaps](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-3-iterating-over-hashmaps) - 1. Overview Iterating over a Map is the process of accessing and processing each key-value pair stored within the map. However, HashMap stores data in no particular order, in contrast to arrays or lists, which index data sequentially. Therefore, we can't iterate through them using a traditional index. In this lesson, we learn about different - [Lesson 1: Introduction to HashMap](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-introduction-to-hashmap) - 1. Overview In this lesson, we focus on the HashMap class - a data structure for storing data as key-value pairs. We'll start by introducing the Map interface for key-value organization, followed by learning the specifics of the HashMap implementation and how to create one. The relevant module we need to import when starting this - [Lesson 5: TreeMap: Sorted Maps and Natural Ordering](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-5-treemap-sorted-maps-and-natural-ordering) - 1. Overview TreeMap is a map implementation in the Java Collections Framework that is sorted and navigable. This allows us to efficiently search for entries and keys. In this lesson, we'll explore how a TreeMap sorts elements and the search methods available. The relevant module we need to import when starting this lesson is: treemap-start. If - [Lesson 2: Using @Query with Parameters](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-using-query-with-parameters) - 1. Goals In this lesson, we're going to learn how to write @Query annotated JPA queries using parameters. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: using-query-with-parameters-start If you want to have a look at the fully implemented lesson, as a reference, feel free to import: - [Lesson 1: Introduction to Log4j2](https://www.baeldung.com/members/courses//lessons/lesson-1-introduction-to-log4j2) - 1. Overview In this lesson, we'll get started with Apache Log4j 2, currently one of the most widely adopted logging frameworks in the Java ecosystem. We'll integrate it into our project, write our first log messages, and explore the default configuration. The relevant module we need to import when starting this lesson is: introduction-to-log4j2-start. If - [Lesson 4: Basic Input and Output](https://www.baeldung.com/members/courses//lessons/lesson-4-basic-input-and-output) - 1. Overview So far, everything we've implemented has been static, i.e., they run the same way every time. However, to create dynamic applications, we naturally need to interact with users by displaying messages and reading their input. There are many types of input, of course. In this lesson, we'll explore printing output to the console and - [Lessons 4: LinkedHashMap: Maintaining Insertion Order](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lessons-4-linkedhashmap-maintaining-insertion-order) - 1. Overview As we move deeper into Java’s Map implementations, we’ll now explore a variant designed to preserve the order of its elements. This lesson introduces the LinkedHashMap, a structure that combines the efficiency of hashing with predictable iteration. We’ll see how this map differs from others we’ve studied, what kinds of ordering it can - [Lesson 1: Introduction to Java](https://www.baeldung.com/members/courses//lessons/lesson-1-introduction-to-java) - 1. Overview In this first lesson of our journey into Java, we'll start from the very beginning. Our main goal is to get our local environment ready for developing, compiling, and running Java applications. We will explore what Java is and what makes it a powerful and popular programming language. Next, we'll walk through the - [Course Introduction](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/course-introduction-13) - 1. Prerequisites Here are a few things it's important to understand before you get started: the core Java language syntax - basic-level JSON an IDE (Eclipse, IntelliJ, etc) - basic level Git - very basic level 2. Course Modules Each Module is organized into several Lessons - containing lesson notes and other resources. Each lesson - [Lesson 3: sorted(), distinct()](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-3-sorted-distinct) - 1. Overview In many pipelines, we first need to fix uniqueness and ordering before meaningful downstream work can happen. In this lesson, therefore, we'll explore the deduplication and ordering of streams. First, we'll implement equals() and hashCode() as a prerequisite for distinct(). Then, we'll examine sorted() and the impact of operation order. The relevant module - [Changelog](https://www.baeldung.com/members/courses/learn-maven/lessons/changelog) - We're committed to offering a high-quality and valuable course. For this, we're constantly upgrading and improving the content and adding new material to the curriculum. Here is a summarized list of the latest new lessons and improvements we've made to the course: July 2025 New lesson! Module 4 - Lesson 1 - The Parent POM New - [Mindset and How to Go Through the Course Material](https://www.baeldung.com/members/courses/learn-java-collections/lessons/mindset-and-how-to-go-through-the-course-material-10) - After more than a decade of creating courses for students, naturally, I see different ways students learn. Start-to-finish First, there are the students who, after investing in the course, are committed to learning and using the material in their work. They start at Module 1 - Lesson 1 and work their way through the full - [Course Introduction](https://www.baeldung.com/members/courses/learn-java-collections/lessons/course-introduction-12) - 1. Prerequisites Here are a few things it's important to understand before you get started: the core Java language syntax - basic-level Java generics - basic level an IDE (Eclipse, IntelliJ, etc) - basic level Git - very basic level 2. Course Modules Each Module is organized into several Lessons - containing lesson notes and - [Lesson 3: Arrays](https://www.baeldung.com/members/courses//lessons/lesson-3-arrays) - 1. Overview An array is a fundamental data structure in Java that allows us to store a fixed-size, sequential collection of elements of the same data type. In this lesson, we'll learn how to create arrays, print them to the console, and access their elements. To follow along with the examples, let's create a new - [Course Introduction](https://www.baeldung.com/members/courses/learn-java-streams/lessons/course-introduction-11) - 1. Prerequisites Here are a few things it's important to understand before you get started: the core Java language syntax - basic-level Java Collections - basic level an IDE (Eclipse, IntelliJ, etc) - basic level Git - very basic level 2. Course Modules Each Module is organized into several Lessons - containing lesson notes and - [Mindset and How to Go Through the Course Material](https://www.baeldung.com/members/courses/learn-java-streams/lessons/mindset-and-how-to-go-through-the-course-material-9) - After more than a decade of creating courses for students, naturally, I see different ways students learn. Start-to-finish First, there are the students who, after investing in the course, are committed to learning and using the material in their work. They start at Module 1 - Lesson 1 and work their way through the full - [Lesson 2: Iterators: Fine-Grained Control over Traversal](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-iterators-fine-grained-control-over-traversal) - 1. Overview So far, we've used different ways to traverse a collection's elements — from traditional for-loops to enhanced for-each loops. While these approaches work well in many cases, they can fall short when we need to perform more complex operations, such as removing elements during iteration, inserting new ones mid-loop, or traversing a list - [Lesson 3: Lazy vs. Eager Fetching](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-3-lazy-vs-eager-fetching) - 1. Overview When working with entity relationships, JPA and Hibernate offer different strategies to control how and when the related data is loaded from the database. We’ll use practical examples to explore the two primary fetching strategies, understand their differences, and highlight the performance implications of each approach. The relevant module we need to import - [Lesson 5: Stubbing Methods for Controlled Behavior](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-5-stubbing-methods-for-controlled-behavior) - 1. Overview In this lesson, we will explore stubbing methods in Mockito to provide controlled, predictable responses from our mock objects. We'll clarify how stubbing differs from simply creating a mock, demonstrate the common when(...).thenReturn(...) pattern for returning values, and see how to handle multiple or consecutive calls. Finally, we'll discuss a few best practices - [Lesson 5: peek()](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-5-peek) - 1. Overview When working with streams, the flow of elements can sometimes be tricky to follow. We may need to inspect what’s actually passing through the pipeline at a specific stage without altering its behavior. In this lesson, we’ll explore the peek() method, which lets us observe elements as they flow through. The relevant module - [Lesson 1: The Importance of Logging](https://www.baeldung.com/members/courses//lessons/lesson-1-the-importance-of-logging) - 1. Overview In any application, events happen constantly: users logs in, forgets their passwords, attempt payments that exceeds their balance. Once we deploy our application to production, we lose the direct visibility into these operations we had with debugging. Understanding what the application is doing, how it's performing, and why it failed becomes a critical - [Lesson 2: map(), flatMap()](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-2-map-flatmap) - 1. Overview When working with streams, we often need to derive new data from existing elements — for example, by extracting a field, projecting them into another type, or expanding them into multiple values. In this lesson, we’ll focus on two key methods for this: map() and flatMap(). These operations let us reshape the data - [Lesson 2: Common Pitfalls with Mockito](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-2-common-pitfalls-with-mockito) - 1. Overview In this lesson, we'll explore some common pitfalls when using Mockito in our unit tests. Avoiding these pitfalls helps ensure robust, maintainable, and effective testing. We'll discuss issues like over-mocking, unnecessary stubbing and verifications, and see practical strategies to address them. The relevant module to import when starting this lesson is: mockito-pitfalls-start. For - [Lesson 3: The Entity Lifecycle](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-3-the-entity-lifecycle) - 1. Overview In this lesson, we'll explore the JPA entity lifecycle, the sequence of state changes an entity undergoes from its creation as a plain Java object to its final storage in or deletion from the database. For our code examples, we'll use a Worker entity named John Doe. We'll walk through each stage of - [Lesson 1: Behavior-Driven Development (BDD) with Mockito](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-1-behavior-driven-development-bdd-with-mockito-2) - 1. Overview When developing software, a common challenge is the communication gap between business stakeholders and technical teams. These misunderstandings about requirements often lead to wasted time and effort. Behavior-Driven Development (BDD), a software development process, addresses this limitation and encourages collaboration between developers and business stakeholders. Using BDD, we specify the application behavior up - [Upgrade to Baeldung All Access](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/upgrade-to-baeldung-all-access-2) - Baeldung All Access is, as the name suggests, access to our extensive course catalog: All Courses And yes, that's growing: Courses Roadmap The goal is for comprehensive and practical learning in a single place. Of course, since you're already a student of this course here, you can naturally upgrade at an adjusted price: Baeldung All - [Upgrade to Baeldung All Access](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/upgrade-to-baeldung-all-access-5) - Baeldung All Access is, as the name suggests, access to our extensive course catalog: All Courses And yes, that's growing: Courses Roadmap The goal is for comprehensive and practical learning in a single place. Of course, since you're already a student of this course here, you can naturally upgrade at an adjusted price: Baeldung All - [Upgrade to Baeldung All Access](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/upgrade-to-baeldung-all-access-6) - Baeldung All Access is, as the name suggests, access to our extensive course catalog: All Courses And yes, that's growing: Courses Roadmap The goal is for comprehensive and practical learning in a single place. Of course, since you're already a student of this course here, you can naturally upgrade at an adjusted price: Baeldung All - [Upgrade to Baeldung All Access](https://www.baeldung.com/members/courses/learn-spring-security/lessons/lesson-upgrade-to-baeldung-all-access) - Baeldung All Access is, as the name suggests, access to our extensive course catalog: All Courses And yes, that's growing: Courses Roadmap The goal is for comprehensive and practical learning in a single place. Of course, since you're already a student of this course here, you can naturally upgrade at an adjusted price: Baeldung All - [Upgrade to Baeldung All Access](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/upgrade-to-baeldung-all-access-3) - Baeldung All Access is, as the name suggests, access to our extensive course catalog: All Courses And yes, that's growing: Courses Roadmap The goal is for comprehensive and practical learning in a single place. Of course, since you're already a student of this course here, you can naturally upgrade at an adjusted price: Baeldung All - [Lesson 2: Basic HashSet Operations](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-basic-hashset-operations) - 1. Overview A HashSet provides the simplest path to enforcing uniqueness in a Java collection. In this lesson, we explore each basic operation in depth and see how iteration and printing work in the absence of indexes. The relevant module we need to import when starting this lesson is: hashset-operations-start. If we want to reference - [Lesson 4: JPQL (Jakarta Persistence Query Language)](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-4-jpql-jakarta-persistence-query-language) - 1. Overview In this lesson, we'll explore the Jakarta Persistence Query Language (JPQL), formerly known as Java Persistence Query Language, and learn how to use it to query entities stored in our database. One quick heads-up: Besides the standard repository methods, we’ve added several new method signatures with empty implementations to our project specifically for - [Lesson 5: Criteria API](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-5-criteria-api) - 1. Overview In this lesson, we'll explore the Criteria API, a powerful feature of the JPA specification that allows us to build database queries programmatically using Java objects. This approach offers a more object-oriented and type-safe alternative to writing string-based queries. We’ll find a few empty method stubs in our repository classes. We’ll implement these - [Lesson 1: Behavior-Driven Development (BDD) with Mockito](https://www.baeldung.com/members/lessons/lesson-1-behavior-driven-development-bdd-with-mockito) - [Lesson 1: Working with Spies and Partial Mocks](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-1-working-with-spies-and-partial-mocks) - 1. Overview In this lesson, we’ll explore spies and partial mocks in Mockito. Unlike standard mocks that fully fake all method calls, a spy wraps a real object so that specific calls invoke actual code, while others can be stubbed or verified. We’ll discuss how to create spies, when partial mocks make sense, and best - [Upgrade to Baeldung Pro](https://www.baeldung.com/members/courses/learn-spring/lessons/upgrade-to-baeldung-pro-4) - Reading Baeldung almost daily? Finally, a clean, ad-free reading experience. Ad-free experiencePro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark Mode Enjoy dark mode, our second most requested feature. Along with no ads, this is finally the - [Upgrade to Baeldung All Access](https://www.baeldung.com/members/courses/learn-spring/lessons/upgrade-to-baeldung-all-access-4) - Baeldung All Access is, as the name suggests, access to our extensive course catalog: All Courses And yes, that's growing: Courses Roadmap The goal is for comprehensive and practical learning in a single place. Of course, since you're already a student of this course here, you can naturally upgrade at an adjusted price: Baeldung All - [Upgrade to Baeldung Pro](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/upgrade-to-baeldung-pro-2) - Reading Baeldung almost daily? Finally, a clean, ad-free reading experience. Ad-free experience Pro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark Mode Enjoy dark mode, our second most requested feature. Along with no ads, this is finally - [Upgrade to Baeldung Pro](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/upgrade-to-baeldung-pro-5) - Reading Baeldung almost daily? Finally, a clean, ad-free reading experience. Ad-free experience Pro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark Mode Enjoy dark mode, our second most requested feature. Along with no ads, this is finally - [Upgrade to Baeldung Pro](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/upgrade-to-baeldung-pro-6) - Reading Baeldung almost daily? Finally, a clean, ad-free reading experience. Ad-free experience Pro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark Mode Enjoy dark mode, our second most requested feature. Along with no ads, this is finally - [Upgrade to Baeldung Pro](https://www.baeldung.com/members/courses/learn-spring-security/lessons/upgrade-to-baeldung-pro-7) - Reading Baeldung almost daily? Finally, a clean, ad-free reading experience. Ad-free experience Pro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark Mode Enjoy dark mode, our second most requested feature. Along with no ads, this is finally - [Upgrade to Baeldung Pro](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/upgrade-to-baeldung-pro-3) - Reading Baeldung almost daily? Finally, a clean, ad-free reading experience. Ad-free experience Pro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark Mode Enjoy dark mode, our second most requested feature. Along with no ads, this is finally - [Lesson 2: Basic Caching Mechanisms](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-2-basic-caching-mechanisms) - 1. Overview When working with database-driven applications, accessing data directly from the database can introduce significant performance overhead, particularly due to network latency and the cost of executing queries. Caching provides an efficient solution to this problem by storing frequently accessed data in memory. This mechanism allows us to improve response times and reduce database - [Lesson 2: Basic Serialization and Deserialization](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-2-basic-serialization-and-deserialization) - 1. Overview In modern REST-driven applications, data almost always leaves our JVM as JSON and returns the same way. By the end of this lesson, we'll have acquired these skills: Convert a single POJO, or an entire collection, into a well-formed JSON Read a JSON back into a Java object with full type safety We'll - [Next Steps](https://www.baeldung.com/members/courses/learn-java-collections/lessons/next-steps) - To deepen your understanding of Collections, also check out: 1. The "Learn Java Streams" course (part of the All Access package). Specifically, the following lessons are also relevant for learning about Collections: Module 2 Lesson 1 - "Creating Streams" Module 4 Lesson 1 - "collect()" Module 4 Lesson 2 - "toMap(), toList(), toSet()" - [Lesson 1: The POM File](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-1-the-pom-file) - 1. Overview The goal of this lesson is to introduce the Maven POM file. The POM (Project Object Model) file is the central resource for configuring a Maven project. In this lesson, we'll learn the basics of the POM file and begin to migrate our sample project to using Maven. The relevant module we need - [Lesson 5: Quick Peek at Additional Maven Features](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-5-quick-peek-at-additional-maven-features) - 1. Overview In this lesson, we'll take a brief look at some additional Maven features that can enhance our build process and project management. We'll explore SNAPSHOT versions, multi-module projects, the Maven settings.xml file, the Maven Wrapper, and some common plugins and tools for Java projects. There is no code to check out to - [Lesson 1: filter()](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-1-filter) - 1. Overview When working with streams, we often need to process only a subset of elements that match a particular condition. In this lesson, we’ll use the filter() operation to achieve this. We’ll explore how filter() behaves in various scenarios, look at different ways to define conditions, and highlight a few common gotchas to keep - [Lesson 4: Handling Date and Time Values](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-4-handling-date-and-time-values) - 1. Overview Handling date and time values is a common requirement in real-world JSON APIs. Depending on the scenario, we might need to represent a date, a time, a combination of both, or even include time zone information. The Java Time API provides dedicated classes for each of these representations, which introduces some complexity when - [Lesson: Access to Baeldung Pro](https://www.baeldung.com/members/lessons/lesson-access-to-baeldung-pro) - Baeldung Pro is included in All Access. You can checkout here with the following coupon: KNmO9BL Make sure to remove all the existing coupons before applying this one. The coupon is, naturally, 100% off. Enjoy the site and Baeldung Pro :) Cheers, Eugen. - [Lesson: Enroll in Baeldung Pro](https://www.baeldung.com/members/lessons/lesson-enroll-in-baeldung-pro) - Baeldung Pro is included in All Access. You can checkout here, with the following coupon: t6qx9fau Make sure to remove all the existing coupons before applying this one. The coupon is, naturally, 100% off. Enjoy the site and Baeldung Pro :) Cheers, Eugen. - [The 6-month Free IntelliJ License](https://www.baeldung.com/members/courses/baeldung-all-access-lifetime/lessons/the-6-month-free-intellij-license-4) - Thanks for the help from JetBrains - here's the 6-month free license of IntelliJ Ultimate :) The promo code is, of course, BaeldungPro. Enjoy. - [The 6-month Free IntelliJ License](https://www.baeldung.com/members/courses/baeldung-all-access-yearly/lessons/the-6-month-free-intellij-license-3) - Thanks for the help from JetBrains - here's the 6-month free license of IntelliJ Ultimate :) The promo code is, of course, BaeldungPro. Enjoy. - [Lesson 5: Inheritance Mapping Introduction](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-5-inheritance-mapping-introduction) - 1. Overview Inheritance is a powerful feature of object-oriented design, but translating it to a relational database model requires careful consideration. JPA provides four strategies to map inheritance hierarchies present in our object model onto tables in our relational database. In this lesson, we’ll get a brief overview of these different strategies and then take - [Lesson 2: The Project Overview](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-2-the-project-overview) - 1. Overview In this lesson, we'll explore the sample project we'll use throughout the course. Our project is a rudimentary task management system, which will serve as our base to learn Hibernate and JPA concepts. The relevant module we need to import when we're working with this lesson is: the-project-overview. This lesson only needs a single - [Lesson 1: ORM Concepts and Introduction](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-1-orm-concepts-and-introduction) - 1. Overview Before we dive into Hibernate and Jakarta Persistence API (JPA), the titular topics of this course, we first need to understand what an Object-Relational Mapping (ORM) framework is. In this lesson, we'll explore the concept of an ORM and understand how it relates to Hibernate and JPA. There is no code we - [Lesson 5: Using Pagination in Controllers - part 2](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-5-using-pagination-in-controllers-part-2) - 2.5. Global Customization of Pagination Properties We've already learned how we can customize some properties to accept default values, but that was done locally, per method. Now let’s see how we can do it globally. There are two options here: the @ConfigurationProperties annotation and the application.properties file. We'll be looking at the latter here, but - [Lesson 5: Using Pagination in Controllers - part 1](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-5-using-pagination-in-controllers-part-1) - 1. Goals In this lesson, we’ll learn how paginated content can be accessed via Spring REST Controllers. Before we move forward though, we need to have an understanding of what Spring REST Controllers are, so do check out the links in the Resources section. 2. Lesson Notes The relevant module you need to import when - [Lesson 2: Entity Relationships and Operations](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-2-entity-relationships-and-operations) - 1. Overview In this lesson, we’ll explore how JPA and Hibernate handle entity relationships when operations are performed on them. We’ll examine the strategies JPA provides to control how an operation affects (or cascades to) associated entities, how we can automatically remove child entities when they’re no longer referenced, and briefly introduce lazy and eager - [Course Changelog](https://www.baeldung.com/members/courses/learn-junit/lessons/course-changelog-2) - We’re committed to offering a high-quality and useful course. For this, we’re constantly upgrading and improving the content, and adding new material to the curriculum. Furthermore, we compile our code targeting one of the latest Java LTS versions to take advantage of the new language features. You should check which version we're currently pointing to - [Lesson 1: Basics of Transactions](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-1-basics-of-transactions) - 1. Overview In this lesson, we'll explore how to manage transactions in JPA and understand how they help maintain data consistency in our applications. The relevant module we need to import when starting this lesson is: basics-of-transactions-start. If we want to reference the fully implemented lesson, we can import: basics-of-transactions-end. 2. What Is a Transaction? A transaction - [Lesson 1: Basic CRUD Operations](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-1-basic-crud-operations) - 1. Overview In this lesson, we'll explore how to perform basic CRUD (Create, Read, Update, and Delete) operations on our entities using JPA and Hibernate. These operations are essential and commonly used in most database-driven applications. The relevant module we need to import when starting this lesson is: basic-crud-operations-start. If we want to reference the - [Lesson 6: Inheritance Mapping Advanced](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-6-inheritance-mapping-advanced) - 1. Overview In a previous introductory lesson on inheritance mapping, we took a brief overview of the four mapping strategies that JPA provides and implemented the first one, the single table strategy. In this advanced lesson, we'll continue our exploration and take a detailed look at the remaining three strategies. We'll continue working with the - [Lesson 2: Mapping Relationships](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-2-mapping-relationships) - 1. Overview In this lesson, we'll explore how JPA defines entity relationships and how we can apply them in our solution. One quick heads-up: Besides the standard core domain entities, we've added several new entity classes to our project specifically for this lesson to explore the different relationships. We'll introduce them throughout the different sections - [Lesson 3: Setting up Hibernate and JPA](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-3-setting-up-hibernate-and-jpa) - 1. Overview In this lesson, we'll add and configure Hibernate, our JPA provider. We'll connect it to an in-memory database, map the Worker domain entity, and explore how Hibernate translates object-oriented concepts into DDL statements for automated schema generation. As a result, we'll see Hibernate create the Worker database table for us automatically at startup. Along - [Lesson 9: Spring Boot with Docker (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-9-spring-boot-with-docker-text-only) - 1. Goals Welcome to a new lesson out of Learn Spring. In this lesson, we are going to learn about the Spring Boot Docker support. Note that we won’t be covering what Docker is nor its basic concepts here. If you don’t have experience using this platform, then I strongly recommend having a look at the - [Lesson 5: Exception Handling in the API - part 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-exception-handling-in-the-api-part-2) - https://vimeo.com/1092430958?share=copy Note: There is an Upgrade Notes section below for this video. 2.4. Handling Exceptions Globally To make the handlers of this class effective globally for all Controllers, we'll annotate this class with the @ControllerAdvice annotation: @ControllerAdvice public class GlobalExceptionHandler { } Now we can finally start to customize the behaviour of individual exceptions by - [Lesson 1: Spring Boot Auto-Configuration](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-spring-boot-auto-configuration) - https://vimeo.com/1092101000?share=copy 1. Goals In this lesson, we'll understand the Spring Boot auto-configuration mechanism. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m4-boot-auto-configuration-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: m4-boot-auto-configuration-end 2.1. Boot Auto-Configuration Spring Boot - [Lesson 8: Deploying the Boot Application - Other Options (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-8-deploying-the-boot-application-other-options-text-only) - 1. Goals In this Learn Spring lesson, we’ll explore some alternative options to deploy our Spring Boot app. We previously learned how to achieve this using the IDE. However, running the app through the IDE is only suitable for local dev environments. In this lesson, we’ll focus on building and running our app from the - [Lesson 5: The Spring Testing Framework - part 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-the-spring-testing-framework-part-2) - https://vimeo.com/1091788567?share=copy Note: There is an Upgrade Notes section below for this video. Now, let’s create a simple context test: @SpringJUnitConfig public class ContextIntegrationTest { @Autowired private ApplicationContext applicationContext; @Test public void whenContextIsLoaded1_thenNoExceptions() { System.out.println(); } @Test public void whenContextIsLoaded2_thenNoExceptions() { System.out.println(); } } We’re used the JUnit Jupiter support here via the high-level annotation @SpringJUnitConfig, - [Lesson 4: Deploying the Boot Application via the IDE](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-deploying-the-boot-application-via-the-ide) - https://vimeo.com/1091787223?share=copy 1. Goals In this lesson, we'll have a look into deploying our Spring Boot application using an IDE. Of course, this is useful primarily during development and not really for production use. We also have other options such as launching the app from the command-line. 2. Lesson Notes The relevant module you need to - [Lesson 3: Logging in a Spring Boot Project - The Right Way](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-logging-in-a-spring-boot-project-the-right-way) - https://vimeo.com/1091786529?share=copy Note: There is an Upgrade Notes section below for this video. 1. Goals In this lesson, we'll learn about logging in a Spring Boot project, including how to configure logging levels and other logging configurations. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m3-logging-in-a-spring-boot-project-start If - [Lesson 2: The dependencyManagement Element and BOM](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-2-the-element-and-bom) - 1. Overview In this lesson, we'll take a look at two ways in which Maven allows us to manage dependency versions: the element and the Bill of Materials (BOMs). We'll also look at how parent POMs relate to dependency management and clarify the key differences between using a parent POM and a BOM. Finally, - [Lesson 4: Advanced ID Mapping](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-4-advanced-id-mapping) - 1. Overview In this lesson, we'll explore advanced strategies for generating and managing identifiers in Hibernate and JPA. We'll first examine the various ID generation options available and how they map to underlying database strategies. Then, we focus on composite primary keys, where an entity’s unique identifier spans multiple fields. Finally, we distinguish between natural - [Lesson 3: Mapping Enum and Date Types](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-3-mapping-enum-and-date-types) - 1. Overview In this lesson, we'll explore how Hibernate and JPA handle enumerations and date or time types. We'll start by looking at enum mappings, exploring the default behavior, and seeing how we can customize it. Then, we'll examine how date and time types are translated into database representations. The relevant module we need to - [Lesson 1: Entity Mappings](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-1-entity-mappings-2) - 1. Overview In this lesson, we’ll deep-dive into mapping Java classes to database tables using JPA annotations, covering entity definitions, primary key mapping, schema customization, and implementations of equals() and hashCode() methods. We’ll start by exploring the @Entity annotation, which marks a class for persistence and tells JPA to map it to a database table. - [Course Introduction](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/course-introduction-9) - 1. Prerequisites Here are a few things it's important to understand before you get started: the core Java language - medium-level Maven - basic level an IDE (Eclipse, IntelliJ, etc) - basic level Git - very basic level 2. Course Modules Each Module is organized into several Lessons - containing lesson notes and other resources. - [Lesson 2: Controlling JSON Inclusion/Exclusion](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-2-controlling-json-inclusion-exclusion) - 1. Overview By default, Jackson serializes every non-transient field it sees in a class. However, in some scenarios, certain fields may not be needed. Including them could waste bandwidth by sending unnecessary nulls, leak internal information, or increase payload size with less important data. In this lesson, we'll explore annotations that help us reduce or - [Lesson 1: Introduction to Jackson](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-1-introduction-to-jackson) - 1. Overview Jackson is one of the most widely used libraries in the Java ecosystem for working with JSON — either directly or through frameworks that rely on it. It offers a simple yet powerful API for serializing Java objects to JSON and deserializing JSON back into Java objects. In this lesson, we'll introduce Jackson - [Lesson 1: Introduction to HashSet](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-introduction-to-hashset) - 1. Overview In this lesson, we'll focus on the HashSet class, which represents a data structure for managing unique collections of objects. We'll start by introducing the Set interface as a collection of unordered and unique elements, followed by taking a closer look at its most popular implementation - the HashSet class. The relevant module - [Lesson 4: Creating Mock Objects Using Annotations](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-4-creating-mock-objects-using-annotations) - 1. Overview In this lesson, we'll explore how to simplify mock creation and injection using annotation-based support in Mockito. We'll see how this approach reduces boilerplate and makes our tests more concise and readable. We'll also look at how to enable this support in a streamlined way using a JUnit extension provided by Mockito. The - [Lesson 1: Analyzing the Build Lifecycle](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-1-analyzing-the-build-lifecycle) - 1. Overview In this lesson, we'll learn about the concept of the Maven lifecycles and phases, and how to run them for our project. The relevant module we need to import when we're working with this lesson is: analyzing-the-build-lifecycle. This lesson only needs a single reference codebase, so there is no end version of the - [Lesson 3: Advanced Assertions - AssertJ](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-3-advanced-assertions-assertj) - 1. Overview In this lesson, we'll learn about AssertJ, another popular tool that facilitates assertions in the Java world. We'll explore its fluent API and use it to test various data types and structures. The relevant module we need to import when we're starting with this lesson is: advanced-assertions-assertj-start. If we want to have a - [Lesson 1: Lifecycle Methods](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-1-lifecycle-methods) - 1. Overview In this lesson, we'll learn about the lifecycle methods in JUnit 5 and how to use them in our tests. The relevant module we need to import when we're starting with this lesson is: lifecycle-methods-start. If we want to have a look at the fully implemented lesson as a reference, feel free to - [Lesson 5: Handling Enums](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-5-handling-enums) - 1. Overview Enums are a convenient way to define fixed sets of values in Java, but when converting them to JSON, there are several ways to represent them — each with its own trade-off between human readability and long-term stability. In this lesson, we'll explore how Jackson handles enums by default and how we can - [Lesson 2: The Authorization Server with Keycloak](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-the-authorization-server-with-keycloak) - https://vimeo.com/1104041023?share=copy 1. Goal In this lesson, we'll learn how to set up an Authorization Server using Keycloack. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module2/authorization-server-keycloak-start If you want to have a look at the fully implemented lesson, as a reference, feel free to import: lsso-module2/authorization-server-keycloak-end. Additionally, before - [Lesson 4: Advanced Cases](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-4-advanced-cases) - 1. Overview In this lesson, we’ll explore a few advanced Mockito techniques that can help us handle complex or legacy codebases where conventional mocking may fall short. The relevant module we need to import when we're starting with this lesson is: advanced-cases-start If we want to have a look at the fully implemented lesson as - [Lesson 4: Decouple the Controller from Entities](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-decouple-the-controller-from-entities-2) - https://vimeo.com/1092373686?share=copy Note: There is an Upgrade Notes section below for this video. 1. Goal In this lesson, we’ll focus on exposing Resources instead of Entities from our controllers back to the client. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m6-decouple-controller-from-entities-start If you want have a - [Lesson 6: Exploring the Scopes of Spring Beans (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-exploring-the-scopes-of-spring-beans-text-only) - 1. Goals In this lesson, we'll consider the different scopes of beans in Spring. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: scopes-of-spring-beans-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: scopes-of-spring-beans-end 2.1. Scopes of Beans - [Lesson 3: Domain Events](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-domain-events) - 1. Goals In this lesson out of Learn Spring Data, we'll explore a useful functionality that Spring Data provides for Domain Events, the @DomainEvents annotation. Even though "Domain Event" is actually a Domain-Driven Design concept, the feature offered by Spring isn't really tied to a solution following this modelling and software development technique. As such, - [Lesson 4: Pagination](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-4-pagination) - 1. Goals In this lesson, we'll explore different ways that we can paginate query results with Spring Data JPA. We'll demonstrate this for derived methods, as well as custom methods. Finally, we'll discuss what factors we should consider when returning results from paginated methods. 2. Lesson Notes The relevant module you need to import when - [Lesson 3: @Modifying Queries](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-modifying-queries) - 1. Goals Welcome to a new lesson from the Learn Spring Data course, where we’ll be looking at Spring Data JPA’s @Modifying annotation. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: modifying-queries-lesson-start If you want to have a look at the fully implemented lesson, as a - [Lesson 7: Testing Spring Data Repositories](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-7-testing-spring-data-repositories) - 1. Goals In this lesson, we're going to learn how to test Spring Data repositories’ methods using a convenience annotation provided by Spring Boot. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: testing-spring-data-repositories-start If you want to have a look at the fully implemented lesson, as - [Lesson 2: Overview of Spring Data JPA](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-overview-of-spring-data-jpa-2) - 1. Goal In this lesson, we’ll start analyzing Spring Data and Spring Data JPA. Our objective will be to clearly understand the purpose of these data-access projects, in what cases we can make use of these solutions, and when they may not be totally suitable so we know to look for a better resolution. 2. - [Lesson 1: Basic Authorization with OAuth2 (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-basic-authorization-with-oauth2-text-only) - 1. Goal In this lesson, we'll learn about the basic mechanisms we have to control the access to our Resources when using OAuth2. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module3/basic-authorization-start If you want have a look at the fully implemented lesson, as a reference, - [Lesson 1: The Authorization Code Flow (theory)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-the-authorization-code-flow-theory) - https://vimeo.com/1093290082?share=copy 1. Goal In this lesson we’re going to analyze a very popular OAuth2 Grant Type Flow, the Authorization Code Flow. 2. Lesson Notes We'll focus only on understanding how the flow is executed, with no code involved at this point. Therefore, there is no need to checkout anything from our code repository. 2.1. The - [Lesson 3: The State of OAuth2 in Spring Security](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-the-state-of-oauth2-in-spring-security) - https://vimeo.com/1093000185?share=copy 1. Goal In this lesson, we'll summarize the current state of the OAuth2 support in Spring and the work around it. 2. Lesson Notes Before we look into any practical examples, let’s first understand the current state of OAuth in Spring Security 5.1 and beyond. At the very start of 2018, the core team - [Lesson 2: The Project We're Testing](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-2-the-project-were-testing-2) - 1. Overview In this lesson, we're going to explore the project that we'll be testing throughout this course. We'll explore its configuration, how it's structured, and we'll see the functionality in action by running the project. The relevant module we need to import when working with this lesson is: the-project-we-are-testing. This lesson only requires a - [Lesson](https://www.baeldung.com/members/lessons/lesson-7) - [Lesson 4: Introduction to LinkedLists](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-4-introduction-to-linkedlists) - 1. Overview In this lesson, we'll take a closer look at LinkedList, a flexible and versatile implementation of the List interface in Java. We'll begin by defining a LinkedList and its data structure, followed by understanding how it implements the List interface. Then, we’ll explore common operations such as adding, reading, updating, and removing elements - [Lesson 3: URL Authorization](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-url-authorization) - https://vimeo.com/1093995123?share=copy Note: There is an Errata section below for this video. 1. Main Goal The goal of this lesson is to explain the basics of URL Authorization. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module1/m1-lesson3 If you want to skip and see the complete implementation, feel free - [Lesson 1: A Simple Two-Factor Implementation with a Soft Token](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-a-simple-two-factor-implementation-with-a-soft-token) - https://vimeo.com/1094729843?share=copy 1. Goal The goal of this lesson is to introduce you to two-factor authentication and take you through a full implementation with Spring Security. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module12/m12-lesson1 If you want to skip and see the complete implementation, feel free to - [Lesson 1: A Custom Authentication Provider](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-a-custom-authentication-provider) - https://vimeo.com/1093972325?share=copy 1. Goals The goal of this lesson is to guide you through setting up a new, custom authentication provider. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module8/m8-lesson1 If you want to skip and see the complete implementation, feel free to jump ahead and import: lssc-module8/m8-lesson2 The - [Lesson 3: Remember Me with Persistence](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-remember-me-with-persistence) - https://vimeo.com/1094287110?share=copy 1. Main Goal The focus of this lesson is to switch from the cookie based remember-me implementation to the persistence backed implemented that the framework provides. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module3/m3-lesson3-start If you want to skip and see the complete implementation, feel - [Lesson 1: A Simple Remember Me Flow](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-a-simple-remember-me-flow) - https://vimeo.com/1094286791?share=copy 1. Main Goal The focus here is to implement a very simple remember-me flow for our login page. 2. Lesson Notes If you're using the git repository to get the project - you should be using the module3 branch. The relevant module you need to import when you're starting with this lesson is: lssc-module3/m3-lesson1 If you - [Lesson 3: Dealing with Changes in the API - URL Changes](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-dealing-with-changes-in-the-api-url-changes) - 1. Goal This lesson aims to explore the strategies for managing API URL changes in Spring Boot applications, focusing on minimizing disruptions for client applications. In this lesson, we’ll discuss various approaches to make this transition smooth and backward-compatible. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson - [Lesson 1: End-To-End API Tests - WebTestClient](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-end-to-end-api-tests-webtestclient) - 1. Goal In this lesson, we’ll learn about API tests and how to implement them in our project. We’ll also look at library alternatives, and develop both Live and Integration End-to-End API tests using Spring’s WebTestClient. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: end-to-end-api-tests-webtestclient-start. If - [Lesson 4: The Lifecycle of a Request](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-4-the-lifecycle-of-a-request) - 1. Goal This lesson shows how the framework processes an HTTP request before it hits our controller. This will allow us to find our way around when something isn’t going as expected, and we have to dive in to figure out what’s happening under the hood. Note: the logic and code shown in this lesson - [Lesson 1: Controller Basics - part 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-controller-basics-part-1) - https://vimeo.com/1092430332?share=copy 1. Goals In this module, we’re going to take a closer look at some of the core Spring MVC annotations that are useful not only when building a REST API, but also when building a more traditional MVC application. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson - [Lesson 2: Expanding Our First Controller](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-expanding-our-first-controller-2) - https://vimeo.com/1092373422?share=copy 1. Goals In this lesson, we’re going to continue the work we started previously, by taking our naive controller implementation to the next level. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m6-expanding-our-first-controller-start If you want have a look at the fully implemented lesson, as - [Lesson 2: Actuators in Boot](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-actuators-in-boot) - https://vimeo.com/1092101378?share=copy Note: There is an Upgrade Notes section below for this video. 1. Goals In this lesson, we'll focus on a core feature of Spring Boot - actuators. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m4-actuators-in-boot-start If you want have a look at the fully - [Lesson 5: The Spring Testing Framework - part 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-the-spring-testing-framework-part-1) - https://vimeo.com/1091787883?share=copy Note: There is an Upgrade Notes section below for this video. 1. Goals In this lesson, we'll have a look at basics of the Spring Testing framework. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m3-spring-testing-framework-lesson-start If you want have a look at the fully - [Lesson 2: Advanced Stubbing Techniques](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-2-advanced-stubbing-techniques) - 1. Overview In this lesson, we’ll dive deeper into the advanced stubbing features that Mockito provides. Beyond the basic when(...).thenReturn(...) pattern, Mockito offers ways to control dynamic responses, handle complex void method scenarios, create conditional or deep stubs, and even define custom logic via the Answer API. These advanced techniques are useful in some situations - [Lesson 3: Exception Handling in Unit Tests](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-3-exception-handling-in-unit-tests) - 1. Overview In this lesson, we’ll learn how to test exception handling in our unit tests. Since many applications require gracefully handling errors and rely on throwing and catching exceptions appropriately for different cases, ensuring this logic works as intended is critical for building reliable software. We’ll look at ways to configure mocks to simulate - [Lesson 6: Verifying Interactions with Mocks](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-6-verifying-interactions-with-mocks) - 1. Overview In this lesson, we’ll explore how to verify interactions with mocks in Mockito. Beyond defining a mock’s return values, we often need to confirm that our code calls the right methods with the correct frequency and order. We’ll learn how to use verify() to check method calls and use argument matchers to assert - [Lesson 1: Introduction to Unit Testing and Mocking Concepts](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-1-introduction-to-unit-testing-and-mocking-concepts) - 1. Introduction Unit testing is a fundamental practice in software development, ensuring individual components of an application work as expected. Mocking, on the other hand, is a technique used to simulate dependencies, making it easier to isolate and test specific units of code. In this lesson, we’ll explore the purpose and benefits of unit testing, - [Lesson 3: The Basics of Creating and Managing Mock Objects](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-3-the-basics-of-creating-and-managing-mock-objects) - 1. Overview In this lesson, we'll add Mockito to our project and learn the basics of creating and managing mock objects. We’ll understand the idea behind mocks and walk through an example of creating a mock. We’ll also highlight why mocking an object is often helpful in our unit tests. It's worth mentioning that Mockito - [Upgrade to Baeldung Pro](https://www.baeldung.com/members/lessons/upgrade-to-baeldung-pro-9) - Reading Baeldung almost daily? Finally, a clean, ad-free reading experience. Ad-free experience Pro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark Mode Enjoy dark mode, our second most requested feature. Along with no ads, this is finally - [Lesson 1: Introduction to ArrayLists](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-introduction-to-arraylists) - 1. Overview Let's explore the List interface in more detail by looking at its most common implementation, the ArrayList. In this lesson, we'll see why ArrayList is often the go-to choice for handling dynamic arrays. We'll begin by understanding List's fundamental role in the Collections Framework, then dive into what makes ArrayList unique. Finally, we'll look - [Lesson 1: Creating Streams](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-1-creating-streams) - 1. Overview Every stream pipeline starts with a source. In this lesson, we'll explore the core factory methods provided by the JDK for creating Stream instances. We'll see how different types of data can serve as sources, and we’ll walk through several practical examples to demonstrate how streams are created in various scenarios. The relevant - [Lesson 1: Functional Programming and Java Streams](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-1-functional-programming-and-java-streams) - 1. Overview In this lesson, we introduce the functional programming style in Java and see how the Streams API embraces that style. We'll compare imperative loops with stream pipelines, discuss why streams offer a clearer and often faster approach, and call out the main pitfalls developers encounter when moving away from classic collection processing. The - [Lesson 4: Grouping Assertions](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-4-grouping-assertions) - 1. Overview When writing tests in Java using JUnit, it's often necessary to validate several characteristics or behaviors in a single test case. Traditionally, we write individual assertions to check each concept separately, but this approach leads to tests that terminate after the first failing assertion. When testing multiple aspects, it’s better to group the - [Lesson 5: Parallel Execution](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-5-parallel-execution) - 1. Overview In this lesson, we'll explore JUnit 5's support for parallel test execution and examine the key configurations of the framework. First, we'll discuss the default behavior and learn how to enable the parallel test execution, which is disabled by default. After that, we'll learn about the different execution modes and how to configure them - [Lesson 2: Tagging and Filtering](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-2-tagging-and-filtering) - 1. Overview In this lesson, we'll explore how to use JUnit's tagging feature to control test execution. First, we'll learn how to tag tests using the @Tag annotation, and then we'll create custom tagging annotations. After that, we'll see how to filter tests based on tags by passing parameters to the Maven Surefire Plugin. The - [Lesson 4: Conditional Test Execution](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-4-conditional-test-execution) - 1. Overview In this lesson, we’ll discuss JUnit's Conditional Test Execution feature and learn how to enable or disable specific test methods or entire classes dynamically. We'll use the various annotations of the API to disable tests based on the operating system, the JRE, and environment variables. Finally, we'll create our custom conditions and leverage - [Lesson 3: Test Suites](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-3-test-suites) - 1. Overview In this lesson, we’ll discuss organizing our tests into Suites using the JUnit Platform Suite Engine. We'll see how to use the specific annotations to select one or more test classes and include them in our test suite. After that, we'll fine-tune our selection using inclusions and exclusions, which will help us achieve - [Lesson 1: Execution Order](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-1-execution-order) - 1. Overview In JUnit 5, the execution order of test methods and test classes can be customized, which is useful for managing test dependencies and control over the test execution flow. JUnit 5 gives us several ways to adjust the execution order for both methods and classes. In this lesson, we'll explore the default execution - [Lesson 4: Named Queries](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-4-named-queries) - 1. Goals In this lesson, we’ll learn how to write JPA queries using the @NamedQuery annotation. We’ll also explore how to associate these Named Queries to our Spring Data JPA repository methods. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: named-queries-start If you want to have - [Frequently Asked Questions](https://www.baeldung.com/members/courses/baeldung-pro-welcome/lessons/frequently-asked-questions-2) - Frequently Asked Questions About Pro 1. How do I change the billing info associated with my subscription? Pro renews automatically every year. To update your billing information, go to your profile and click on "Subscriptions". Then, under your active subscription, click "Change Payment". 2. How do I cancel? You can cancel your membership at any - [Frequently Asked Questions](https://www.baeldung.com/members/courses/baeldung-pro-welcome-lifetime/lessons/frequently-asked-questions) - Frequently Asked Questions About Pro 1. How do I change the billing info associated with my subscription? Pro renews automatically every year. To update your billing information, go to your profile and click on "Subscriptions". Then, under your active subscription, click "Change Payment". 2. How do I cancel? You can cancel your membership at any - [Individual Access for each Team Member](https://www.baeldung.com/members/courses/baeldung-all-team-access-yearly/lessons/individual-access-for-each-team-member) - Welcome to the team course package here. Please email me at course@baeldung.com to get the custom coupon for your team. Cheers and enjoy the material, Eugen. - [Upgrade to Baeldung Pro](https://www.baeldung.com/members/lessons/upgrade-to-baeldung-pro-8) - Reading Baeldung almost daily? Finally, a clean, ad-free reading experience. Ad-free experience Pro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark ModeEnjoy dark mode, our second most requested feature. Along with no ads, this is finally the - [Mindset and How to Go Through the Course Material](https://www.baeldung.com/members/courses/learn-mockito/lessons/mindset-and-how-to-go-through-the-course-material-8) - After more than a decade of creating courses for students, naturally, I see different ways students learn. Start-to-finish First, there are the students who, after investing in the course, are committed to learning and using the material in their work. They start at Module 1 - Lesson 1 and work their way through the full - [Course Introduction](https://www.baeldung.com/members/courses/learn-mockito/lessons/course-introduction-10) - 1. Prerequisites Here are a few things it's important to understand before you get started: the core Java language syntax - basic-level Maven, JUnit - basic level an IDE (Eclipse, IntelliJ, etc) - basic level Git - very basic level 2. Course Modules Each Module is organized into several Lessons - containing lesson notes and - [Baeldung All Access](https://www.baeldung.com/members/courses/baeldung-all-access-lifetime/lessons/how-to-enroll-in-baeldung-all-access-2) - You should already be enrolled in all the courses through this All Access package. You can also find all the courses you're enrolled in on the "My Courses" page. Cheers, and enjoy the material, Eugen. - [Baeldung All Access](https://www.baeldung.com/members/courses/baeldung-all-access-yearly/lessons/baeldung-all-access-2) - You should already be enrolled in all the courses through this All Access package. You can also find all the courses you're enrolled in on the "My Courses" page. Cheers, and enjoy the material, Eugen. - [Mindset and How to Go Through the Course Material](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/mindset-and-how-to-go-through-the-course-material-7) - After more than a decade of creating courses for students, naturally, I see different ways students learn. Start-to-finish First, there are the students who, after investing in the course, are committed to learning and using the material in their work. They start at Module 1 - Lesson 1 and work their way through the full - [Lesson 2: Mocking](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-2-mocking) - 1. Overview In this lesson, we'll learn about mocks and how to use them to test some parts of the code in isolation. We'll start by manually creating test objects that simulate the behavior of the real ones and help us build reliable tests. After that, we'll use the Mockito library to create mocks for - [Lesson 1: Entity Mappings](https://www.baeldung.com/members/lessons/lesson-1-entity-mappings) - [Lesson 3: Build Plugins](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-3-build-plugins) - 1. Overview In this lesson, we'll explore Maven build plugins and understand how they enhance the build process. We'll look at what plugins are, analyze their executions during the project build, and learn about configuring and binding them to the lifecycle. To make this more concrete, we’ll configure the PMD plugin and see firsthand how - [Lesson 1: The Parent POM](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-1-the-parent-pom) - 1. Overview In this lesson, we’ll explore Maven's Parent POM, a powerful feature that helps us manage dependencies, plugin configurations, and shared settings across multiple projects. We’ll look at how to use parent POMs in different ways to simplify our projects. The relevant module to import when you're starting with this lesson is: the-parent-pom-start. If - [Lesson 4: Maven Profiles](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-4-maven-profiles) - 1. Overview In this lesson, we'll explore Maven Profiles, a powerful feature that allows us to customize the build process for different environments (like development, testing, and production) or scenarios (such as different operating systems and JDK versions). Profiles help us manage environment-specific configurations—such as dependencies, plugins, and properties—without duplicating the pom.xml. Understanding how to - [Access to the course "Learn Spring Security Core"](https://www.baeldung.com/members/courses/learn-spring-security/lessons/access-to-the-course-learn-spring-security-core) - Welcome to Learn Spring Security Core. You should already be enrolled in the right courses, through this bundle package. You can also find all the courses you're enrolled in on the "My Courses" page. Cheers and enjoy the material, Eugen. - [Access to the course "Learn Spring Security OAuth"](https://www.baeldung.com/members/courses/learn-spring-security/lessons/access-to-the-course-learn-spring-security-oauth) - Welcome to Learn Spring Security OAuth. You should already be enrolled in the right courses, through this bundle package. You can also find all the courses you're enrolled in on the "My Courses" page. Cheers and enjoy the material, Eugen. - [Lesson 3: WebFlux Form Login (Text Only)](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-webflux-form-login-text-only) - 1. Goal This lesson contains an example of a WebFlux application secured using Form Login. Enabling Form Login in a WebFlux application is very similar to the Form Login example in a standard Web application that we've seen in Module 1 - Building a Form Login lesson. This, combined with the previous lessons on Reactive - [Lesson 2: Reactive Method Security](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-reactive-method-security) - https://vimeo.com/1094936858?share=copy 1. Goal In this lesson, we’re going to configure method security for our WebFlux application. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module14/m14-lesson2-start If you want to skip and see the complete implementation, feel free to jump ahead and import: lssc-module14/m14-lesson2 Security Configuration In the previous - [Lesson 1: A Basic Reactive Security Example](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-a-basic-reactive-security-example) - https://vimeo.com/1094936776?share=copy 1. Goal The goal of this lesson is to set up a basic security example for our unsecured WebFlux application. This is our standard User Management application that we've used throughout this course, but converted to a reactive application. 2. Lesson Notes The relevant module you need to import when you're starting with this - [Lesson 4: Spring Security with LDAP](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-spring-security-with-ldap) - https://vimeo.com/1094918812?share=copy 1. Goal This lesson is entirely focused on LDAP and on getting to a fully working implementation with Spring Security. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module13/m13-lesson4-start If you want to skip and see the complete implementation, feel free to jump ahead and import: lssc-module13/m13-lesson4 - [Lesson 3: Session Management with spring-session](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-session-management-with-spring-session) - https://vimeo.com/1094918748?share=copy 1. Goal in this lesson we’re going to use the relatively new spring-session project to store our session data in Redis instead of in the web server, where the HTTP session data is stored by default. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module13/m13-lesson3-start If - [Lesson 2: Multi-Tenancy with Spring Security](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-multi-tenancy-with-spring-security) - https://vimeo.com/1094918623?share=copy 1. Goal The simple goal of this lesson is to show you the options and considerations of a multi-tenant implementation with Spring Security. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module13/m13-lesson2-start If you want to skip and see the complete implementation, feel free to jump - [Lesson 1: Spring Security for a non-Spring Application](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-spring-security-for-a-non-spring-application) - https://vimeo.com/1094918536?share=copy 1. Goal The simple goal of this lesson is to show you how to use Spring Security to secure a non-Spring web application. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module13/m13-lesson1-start If you want to skip and see the complete implementation, feel free to jump ahead - [Reference Project (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/reference-project-text-only) - Overview In this project, we've put together all the concepts that we've seen in the course, so far. You can import this project as a reference of the final version of the Spring Security application that we've built up until this module: reference-project - [Lesson 2: A Two-Factor Implementation with SMS](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-a-two-factor-implementation-with-sms) - https://vimeo.com/1094730039?share=copy 1. Goal The goal of this lesson is to show you how to go from the previous 2FA implementation to a SMS driven solution. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module12/m12-lesson2 If you want to skip and see the complete implementation, feel free to - [Lesson 3: ACL with Spring Security - part 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-acl-with-spring-security-part-2) - https://vimeo.com/1094707035?share=copy LSS - ACL with Spring Security - part 2 - transcript - [Lesson 3: ACL with Spring Security - part 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-acl-with-spring-security-part-1) - https://vimeo.com/1094706912?share=copy 1. Goals The simple goal of this lesson is to do a full ACL implementation with Spring Security. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module11/m11-lesson3 If you want to skip and see the complete implementation, feel free to jump ahead and import: lssc-module11/m11-lesson4 2.1. ACL - [Lesson 2: The Data Structure of ACL](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-the-data-structure-of-acl) - https://vimeo.com/1094706791?share=copy 1. Goals The focus of this lesson is on developing the data structure that we're going to need to do ACL with Spring Security. 2. Lesson Notes This lesson is theoretical and doesn't have/need accompanying code. First, it’s important to understand that the Spring Security implementation is generic enough that you can develop non-SQL - [Lesson 1: Introduction to ACL and Domain Object Security](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-introduction-to-acl-and-domain-object-security) - https://vimeo.com/1094706702?share=copy 1. Goal The goal of this lesson is to introduce Domain Object Security and Access Control Lists (ACL). 2. Lesson Notes This lesson is theoretical and doesn't have/need accompanying code. 2.1. The Need for Granular Access Control First, let’s see why we even need this kind of fine-grained type of authorization control in the - [Lesson 3: Certificates and HTTPS for Tomcat](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-certificates-and-https-for-tomcat) - https://vimeo.com/1094698735?share=copy 1. Goal The goal of this lesson is to show you how to generate a self-signed certificate and use it to allow Tomcat to work over HTTPS. 2. Lesson Notes This lesson is theoretical and doesn't have/need accompanying code. Note: This is a lesson taken from our "REST with Spring" course. In this course, - [Lesson 2: Basic Authentication for the API](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-basic-authentication-for-the-api) - https://vimeo.com/1094698612?share=copy 1. Goal The simple goal of this lesson is to introduce the Basic Authentication mechanism as a potential solution to secure the API, and then discuss its limitations and the scenario where it doesn't make sense. 2. Lesson Notes This lesson is theoretical and doesn't have/need accompanying code. 2.1. The Basics Basic Authentication is - [Lesson 1: The Basics of API Security](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-the-basics-of-api-security) - https://vimeo.com/1094698515?share=copy 1. Goal The goal of this first lesson is to give you a quick intro to the potential options for securing a REST API. 2. Lesson Notes This lesson is theoretical and doesn't have/need accompanying code. 2.1. API Security Options The API Security ecosystem has quite a number of options: Basic Authentication (stateless) Digest - [Lesson 4: Defining Custom Access-Control Logic (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-defining-custom-access-control-logic-text-only) - 1. Goals The goal of this lesson is to demonstrate how to utilize the AuthorizationManager interface to implement a custom access logic In this case, we’ll explore how we can implement a real-time user lockout scenario. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module9/m9-lesson4 If - [Lesson 3: Secure Method Invocations with AOP (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-secure-method-invocations-with-aop-text-only) - 1. Goals The goal of this lesson is to do method security in a centralized way without using annotations. We will explore method invocations in more detail and discuss how to secure them using aspect-oriented programming. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module9/m9-lesson3-start If - [Lesson 2: The Topology of Roles and Privileges - Part 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-the-topology-of-roles-and-privileges-part-2) - https://vimeo.com/1094348116?share=copy 1. Goals The goal of the second part of this lesson is to show the implementation of the aspects discussed in part 1. 2. Lesson Notes We're now going to actually implement the authorization structure discussed in the first part of this lesson. The credentials used in the code are: test@email.com / pass 3. Resources - [Lesson 2: The Topology of Roles and Privileges - Part 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-the-topology-of-roles-and-privileges-part-1) - https://vimeo.com/1094347916?share=copy 1. Goals The goal of the first part of this lesson is to illustrate a production-ready approach to structuring your roles and privileges. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module9/m9-lesson2-start If you want to skip and see the complete implementation, feel free to jump - [Lesson 1: How Authorization Works](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-how-authorization-works) - https://vimeo.com/1094347749?share=copy 1. Goals The goal of this lesson is to guide you through the actual implementation details of the authorization process in Spring Security. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module9/m9-lesson1. The credentials used in the code of the lesson are: user/pass (in-memory) admin/pass (in-memory) (has the ADMIN role) - [Lesson 5: Setting up Users at Startup (Text-Only)](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-5-setting-up-users-at-startup-text-only) - 1. Goal In this quick lesson, we’re going to address two approaches to setting up default users when the application is starting up: Using the simple yet useful UserBuilder Initializing users from a property file Both ways can straightforwardly create default users that are stored in memory and are available while the application is running. - [Lesson 4: Tracking Logged-in Users](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-tracking-logged-in-users) - https://vimeo.com/1093972940?share=copy 1. Goals The goal of this lesson is teach you how to track the currently authenticated users in a Spring Security application. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module8/m8-lesson4 If you want to skip and see the complete implementation, feel free to jump ahead - [Lesson 3: In-Memory, JDBC and Hibernate/JPA User Storage](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-in-memory-jdbc-and-hibernate-jpa-user-storage) - https://vimeo.com/1093972772?share=copy 1. Goals The goal of this lesson is to guide you through implementing user storage with Spring Security - from a simple, in-memory solution to a JPA backed solution. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module8/m8-lesson3 If you want to skip and see the complete implementation, - [Lesson 2: Multiple Providers and the Authentication Manager](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-multiple-providers-and-the-authentication-manager) - https://vimeo.com/1093972570?share=copy 1. Goals The goal of this lesson is to go deeper into the core authentication artifacts and set up multiple providers within the authentication manager. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module8/m8-lesson2 If you want to skip and see the complete implementation, feel free to jump - [Lesson 4: Configure the Filter Chain](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-configure-the-filter-chain) - https://vimeo.com/1094662844?share=copy 1. Goal The goal of this lesson is to show you how to go beyond the higher level configuration and do some low level work by configuring the filter chain of the security framework. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module7/m7-lesson4 If you want - [Lesson 3: The Security Context](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-the-security-context) - https://vimeo.com/1094662650?share=copy 1. Goal The goal of this lesson is to explain how the security context is established, stored and used across requests within the same session. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module7/m7-lesson3 If you want to skip and see the complete implementation, feel free - [Lesson 2: Run As a Different User](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-run-as-a-different-user) - https://vimeo.com/1094662510?share=copy 1. Goal The goal of this lesson is to introduce you to the Run-As functionality in Spring Security and basically to show you how to run some operations under a different principal, with different authorities. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module7/m7-lesson2 If you - [Lesson 1: Breaking Down the Authentication Flow](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-breaking-down-the-authentication-flow) - https://vimeo.com/1094662342?share=copy 1. Goals The goal of this lesson is to break down exactly what happens during an authentication flow in Spring Security. 2. Lesson Notes 2.1. From Tomcat to the UsernamePasswordAuthenticationFilter We're finally going to take a step back and go through the full details of the auth process. First - we hit the DelegatingFilterProxy - this - [Lesson 5: The bcrypt Solution](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-5-the-bcrypt-solution) - https://vimeo.com/1094648631?share=copy 1. Goals The simple goal of this lesson is to start using brypt instead of the standard password encoder. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module6/m6-lesson5 If you want to skip and see the complete implementation, feel free to jump ahead and import: lssc-module6/m6-lesson6 The credentials used - [Lesson 4: Key Stretching](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-key-stretching) - https://vimeo.com/1094648390?share=copy 1. Goals The goal of this lesson is to introduce the concept and the need for key stretching when storing passwords. 2. Lesson Notes 2.1. Key Stretching Using salts makes a large set of passwords harder to crack using specialized attacks (lookup tables, rainbow tables, etc). However, these can still be cracked by brute-forcing - [Lesson 3: Why Hashing Isn't Enough - Using Salts](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-why-hashing-isnt-enough-using-salts) - https://vimeo.com/1094648264?share=copy 1. Goals The goal of this lesson is simple - moving past just hashing the password and introducing salts. 2. Lesson Notes This lesson is theoretical and doesn't have/need accompanying code. 2.1. Using Salts First, a few things to avoid/not do: use a single system-wide salt just use a salt that's unique per user - [Lesson 2: Hashing Passwords (MD5 and SHA-256)](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-hashing-passwords-md5-and-sha-256) - https://vimeo.com/1094648152?share=copy 1. Goals The goal of this lesson is to give you an intro to hashing passwords. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module6/m6-lesson2 If you want to skip and see the complete implementation, feel free to jump ahead and import: lssc-module6/m6-lesson3 The credentials used in - [Lesson 1: Introduction to Storing Passwords](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-introduction-to-storing-passwords) - https://vimeo.com/1094648044?share=copy 1. Goal The goal of this lesson is to guide you through the foundations of how to properly and correctly store credentials. 2. Lesson Notes If you're using the git repository to get the project - you should be using the module6 branch. 2.1. General Facts Let’s establish the basics: we’re going to store the - [Lesson 4: Programmatic Expressions and a custom PermissionEvaluator (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-programmatic-expressions-and-a-custom-permissionevaluator-text-only) - 1. Goal The goal of this lesson is to introduce and define a new security expression we can use along with the default expressions in the framework. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module5/m5-lesson4 If you want to skip and see the complete implementation, - [Lesson 3: In-page URL Authorization with Expressions (same as Module 4 - Lesson 4)](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-in-page-url-authorization-with-expressions-same-as-module-4-lesson-4) - This lesson is the same as Lesson 4 from Module 4. The reason it's included under Module 5 as well is because this Module 5 is focused on Spring Expressions, so the lesson naturally fits here as well. So - check out Module 4 - Lesson 4 if you haven't already. - [Lesson 2: On-method Authorization with Expressions (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-on-method-authorization-with-expressions-text-only) - 1. Goal This lesson's goal is to choose the more granular solution for method-level authorization with expressions. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is lssc-module5-upgraded/m5-on-method-auth-expressions-start. If you want to skip and see the complete implementation, feel free to jump ahead and import: lssc-module5-upgraded/m5-on-method-auth-expressions-end. 2.1. Enable Method Security - [Lesson 1: By URL Authorization with Expressions](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-by-url-authorization-with-expressions) - https://vimeo.com/1094628141?share=copy 1. Main Goals The focus of this lesson is to understand the full range of Spring Security expressions we have at our disposal. 2. Lesson Notes If you're using the git repository to get the project - you should be using the module5 branch. The relevant module you need to import when you're starting with - [Lesson 4: The Authorize Tag](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-the-authorize-tag) - https://vimeo.com/1094317779?share=copy 1. Main Goal The focus of the lesson is to explore the authorize security tag with practical examples. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module4/m4-lesson4 If you want to skip and see the complete implementation, feel free to jump ahead and import: lssc-module4/m4-lesson5 The credentials used in - [Lesson 3: Spring Security with Thymeleaf](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-spring-security-with-thymeleaf) - https://vimeo.com/1094317661?share=copy 1. Main Goal The focus of this lesson is to go back to Thymeleaf and show the Spring Security client side support. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module4/m4-lesson3 If you want to skip and see the complete implementation, feel free to jump ahead - [Lesson 2: The Authentication Tag and Displaying the Current User](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-the-authentication-tag-and-displaying-the-current-user) - https://vimeo.com/1094317439?share=copy Note: There is an Errata section below for this video. 1. Main Goal The focus in this module is to explore the security authentication tag with practical examples. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module4/m4-lesson2 If you want to skip and see the complete - [Lesson 1: Spring Security with JSP](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-spring-security-with-jsp) - https://vimeo.com/1094317132?share=copy 1. Main Goal The goal of this lesson is to show how the Spring Security tags work after temporarily making the switch from Thymeleaf to JSP. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module4/m4-lesson1 If you want to skip and see the complete implementation, feel - [Lesson 2: Remember Me with Cookie](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-remember-me-with-cookie) - https://vimeo.com/1094286906?share=copy 1. Main Goal The focus here is on changing the defaults of the remember-me flow we implemented previously. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module3/m3-lesson2-start If you want to skip and see the complete implementation, feel free to jump ahead and import: lssc-module3/m3-lesson2 The credentials - [Lesson 6: Ensure Password Strength during Registration - part 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-6-ensure-password-strength-during-registration-part-2) - https://vimeo.com/1094026256?share=copy 2.3. Password Strength in the Back End Similarly to the front-end, we're going to use a library here as well to define our password constraints. Doing that manually would simply be error-prone and a lot more work. Let's start by defining Passay - which basically provides a clean, simple way to define password rules - [Lesson 6: Ensure Password Strength during Registration - part 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-6-ensure-password-strength-during-registration-part-1) - https://vimeo.com/1094025357?share=copy 1. Goal In this lesson we’ll focus on helping the user chose a good password. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module2/m2-lesson6 If you want to skip and see the complete implementation, feel free to jump ahead and import: lssc-module2/m2-lesson7 2.1. Why "Strong" Passwords? Significant - [Lesson 5: Doing Security Questions Right](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-5-doing-security-questions-right) - https://vimeo.com/1094023111?share=copy 1. Goal The simple goal of this lesson is to introduce security questions and show you how you can use these to add extra security for sensitive operations in your application. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module2/m2-lesson5 If you want to skip and - [Lesson 4: Deal with “I forgot my password”](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-deal-with-i-forgot-my-password) - https://vimeo.com/1094006581?share=copy Note: There is an Errata section below for this video. 1. Main Goal The focus here is to allow the user to recover their password in a safe way, in case they forget it. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module2/m2-lesson4 If you want - [Lesson 3: Activate a New Account via Email](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-activate-a-new-account-via-email) - https://vimeo.com/1094006467?share=copy Note: There is an Errata section below for this video. 1. Main Goal The focus here is no longer registering users directly but requiring them to verify their email first. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module2/m2-lesson3 If you want to skip and see - [Lesson 2: Authentication using Real Users](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-authentication-using-real-users) - https://vimeo.com/1094006351?share=copy 1. Main Goal The main focus here will be making sure our authentication process actually uses the real, persisted, newly registered users. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module2/m2-lesson2 If you want to skip and see the complete implementation, feel free to jump ahead - [Lesson 1: A Simple Registration Flow](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-a-simple-registration-flow) - https://vimeo.com/1094006259?share=copy 1. Main Goal This lesson will show you how to set up a very simple registration process for your MVC app. 2. Lesson Notes If you're using the git repository to get the project - you should be using the module2 branch. The relevant module you need to import when you're starting with this lesson - [Lesson 7: Overview of Spring Security Objects (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-7-overview-of-spring-security-objects-text-only) - 1. Introduction As should be clear from the previous lessons, and will become even clearer as we go through this course, Spring Security offers a wide range of features, and is therefore quite complex. It’s grown a lot over time, covers use cases for both authentication and authorization, and does many things behind the scenes. - [Lesson 6: Anonymous “Authentication”](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-6-anonymous-authentication) - https://vimeo.com/1093995752?share=copy 1. Main Goal The goal of this lesson is to explain the content of anonymous authentication and the scenarios where it's useful. 2. Lesson Notes The relevant module you need to import for this lesson is: lssc-module1/m1-lesson6 If you want to skip and see the complete implementation, feel free to jump ahead and import: lssc-module1/m1-lesson7 The - [Lesson 5: Implementing Logout](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-5-implementing-logout) - https://vimeo.com/1093995555?share=copy 1. Main Goal The goal of this lesson is to explain how to set up a simple logout flow with Spring Security. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module1/m1-lesson5 If you want to skip and see the complete implementation, feel free to jump ahead - [Lesson 4: Building a Login Form](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-building-a-login-form) - https://vimeo.com/1093995392?share=copy 1. Main Goal The goal of this lesson is to guide you through building and configuring a simple login form for our MVC application. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module1/m1-lesson4 If you want to skip and see the complete implementation, feel free to - [Lesson 2: A Basic Security Java Config](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-a-basic-security-java-config) - https://vimeo.com/1093994871?share=copy 1. Main Goal The goal of this lesson is to guide you through a simple Java based Security Configuration for the project. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lssc-module1/m1-lesson2 If you want to skip and see the complete implementation, feel free to jump ahead - [Lesson 1: Intro to Spring Security](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-intro-to-spring-security) - https://vimeo.com/1093994077?share=copy 1. Main Goal The goal of this first lesson is to guide you through the basic info about the course, explain the high level structure of the Starter Class and introduce you to the codebase we're going to be using. 2. Lesson Notes The relevant module you need to import when you're starting with - [Course Changelog](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/course-changelog-7) - We’re committed to offering a high-quality and useful course. For this, we’re constantly upgrading and improving the content, and adding new material to the curriculum. Here is a summarized list of the latest improvements we've made to the course: 2024 Jul Upgrade to Java 21 Apr Upgrade to Spring Boot 3.2 2023 Aug Upgrade to - [How I keep the course updated](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/how-i-keep-the-course-updated) - I recorded the lessons using Spring Boot 1.x and the codebase matches this version exactly - so that you can easily follow along to the videos step by step. However, since the Spring framework is frequently updated, I am also maintaining a version of the codebase that uses the latest Spring and Spring Boot versions and is - [The Project in your IDE](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/the-project-in-your-ide-2) - 1. Overview The primary IDE I used for the course is Eclipse. The project code is of course a Maven project, so you can use any IDE you want. If you are going to use Eclipse, I recommend using the STS distribution. And I generally recommend using the latest version here. In each lesson, I'll use - [Mindset and How to Go Through the Course Material](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/mindset-and-how-to-go-through-the-course-material-6) - About 2000 students have gone through this course at this point. I've talked to most of them, one way or another. Yes, I spent a lot of time answering email :) And, naturally, I'm seeing trends. The "start-to-finish" student First, there are the students who, after making the investment in the course, are committed to - [Course Introduction](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/course-introduction-8) - 1. Course Modules Each Module is organized in several video Lessons - containing lesson notes and other resources. The material is meant to be experienced as video, and the lesson notes should be used as a reference not as comprehensive documentation. 1.1. How to Consume the Material First The first time you go through the lessons, - [Lesson](https://www.baeldung.com/members/lessons/lesson-6) - [Lesson](https://www.baeldung.com/members/lessons/lesson-4) - [Lesson](https://www.baeldung.com/members/lessons/lesson-5) - [Lesson 3: Exploring Topologies - Gateway API as OAuth2 Client - part 2](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-exploring-topologies-gateway-api-as-oauth2-client-part-2) - 2.5. Authentication and Authorization Interactions There’s some fine tuning we have to perform in our services to handle the Authentication and Authorization aspects successfully. Authenticated Browser-Based Requests We might be thinking, how can we pull off access to our secured resources from our client-side SPA if we don’t handle security aspects in it? We’ll rely - [Lesson 3: Exploring Topologies - Gateway API as OAuth2 Client - part 1](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-exploring-topologies-gateway-api-as-oauth2-client-part-1) - 1. Goal In this lesson, we’ll explore a different topology for our Microservices architecture. In short, our Resource Servers will be the ones running the OAuth validations (i.e. they’ll be behaving as actual OAuth2 Resource Servers), and the API Gateway will be configured as the OAuth Client. 2. Lesson Notes The relevant module you need - [Lesson 2: Sharing Principal Information in Microservices](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-sharing-principal-information-in-microservices) - 1. Goal In this lesson, we'll learn how to share Principal information in a Microservice Application. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: sharing-principal-information-start If you want to have a look at the fully implemented lesson, as a reference, feel free to import: sharing-principal-information-end 2.1. Security - [Lesson 1: OAuth Security Patterns in a Microservice Application](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-oauth-security-patterns-in-a-microservice-application) - 1. Goal In this lesson, we'll explore some OAuth Security patterns in a microservice application. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: oauth-in-a-microservice-application-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: oauth-in-a-microservice-application-end 2.1. Securing Monolithic - [Lesson 9: The Legacy Stack Authorization Server (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-9-the-legacy-stack-authorization-server-text-only) - 1. Goal In this lesson, we'll learn how to use the legacy Authorization Server and connect that with our new stack Client and Resource Server. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module5/legacy-stack-authorization-server-start If you want to have a look at the fully implemented lesson, - [Lesson 8 - Token Revocation (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-8-token-revocation-text-only) - 1. Goal In this new lesson, we'll learn how we can revoke tokens with OAuth2, so as to invalidate the permissions that were granted to a Client application. We'll analyze this feature using JWTs, as this is a popular solution nowadays, and it represents a higher challenge due to the stateless nature of the solution. - [Lesson 6: Logout With OAuth and OIDC (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-6-logout-with-oauth-and-oidc-text-only) - 1. Goal In this lesson, we’ll explore Spring Security's support for the OpenID Connect "RP-initiated logout" feature. Simply put, this OIDC specification allows logging out from the Authorization Server via the Client application. Be aware that: The OpenId specs refer to the Authorization Server with OIDC capabilities as the “OpenId Provider” or “OP” by the - [Lesson 5: OAuth2 and OpenID Connect (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-5-oauth2-and-openid-connect-text-only) - 1. Goal In this lesson we'll focus on another very important concept in the OAuth2 universe, the OpenID Connect protocol. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module5/oauth2-and-openid-connect-start If you want to have a look at the fully implemented lesson, as a reference, feel free - [Lesson 4: Testing OAuth2 with REST-assured (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-4-testing-oauth2-with-rest-assured-text-only) - 1. Goal In this lesson we'll focus on integration testing for our application using REST Assured. We’ll be working with the Authorization Code flow connected to our Authorization Server and the refresh token process. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module5/testing-with-restassured-start If you want to have - [Lesson 3: Exploring JWS with OAuth2 (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-exploring-jws-with-oauth2-text-only) - 1. Goal In this lesson, we'll learn about JSON Web Signature (JWS) and its significance in the OAuth2 space. We'll also see how to configure JWS properties and understand JWS verification with Spring Security. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module5/exploring-jws-with-oauth2-start If you want - [Lesson 2: OAuth2 and SPAs (implementation) (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-oauth2-and-spas-implementation-text-only) - 1. Goal In this lesson, we'll learn how to set up a simple Single Page Application (SPA) acting as an OAuth2 Client. For this, we’ll use Javascript, therefore moving away from the traditional server-based MVC framework and the Spring Security Client support for a moment. 2. Lesson Notes The relevant module you need to import when - [Lesson 1: OAuth2 and SPAs (theory) (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-oauth2-and-spas-theory-text-only) - 1. Goal In this new lesson out of Learn Spring Security OAuth we’re going to discuss Single Page Applications, focusing on how to use a SPA client with OAuth 2. 2. Lesson Notes We'll focus only in understanding why SPAs have gained popularity over the last years and on the considerations we have to take into - [Lesson 5: The Authorization Code Flow with PKCE (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-5-the-authorization-code-flow-with-pkce-text-only) - 1. Goal In this lesson, we’ll demonstrate how to use the Proof Key for Code Exchange (PKCE - RFC 7636) OAuth 2 Authorization Code flow extension for a confidential client. We’ll start with a hands-on example implementing the extension in our Spring Boot OAuth Client application. Then we’ll study how the security mechanism works by - [Lesson 4: Testing OAuth2 Clients (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-4-testing-oauth2-clients-text-only) - 1. Goal In this quick lesson, we’ll learn how to test our OAuth2 Client using Spring’s MockMvc. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module4/testing-oauth2-clients-start If you want to skip ahead to see the complete test implementation, feel free to import: lsso-module4/testing-oauth2-clients-end 2.1. Mocking the - [Lesson 3: Refreshing a Token (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-refreshing-a-token-text-only) - 1. Goal In this lesson, we'll learn about Refresh Tokens, how to work with them and what their benefits are. 2. Lesson Notes The relevant module you need to import when you're working with this lesson is: lsso-module4/refresh-token This lesson only needs a single reference codebase, so there is no end version of the project. - [Lesson 2: New OAuth2 Social Login (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-new-oauth2-social-login-text-only) - 1. Goal In this lesson, we'll learn about authenticating our apps using a social login provider, the benefits of using social login providers and how to integrate with them. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module4/oauth2-social-login-start If you want have a look at the - [Lesson 1: The Client Configuration Under the Hood (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-the-client-configuration-under-the-hood-text-only) - 1. Goal The goal of this lesson is to understand how the OAuth 2.0 Client features are implemented under the hood in Spring. We’ll take a look at some of the core interfaces and classes to better understand how they work together to allow us to access protected resources. In this lesson, we’ll focus mainly - [Lesson 8: Resource Server Testing Support (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-8-resource-server-testing-support-text-only) - 1. Goal In this lesson, we’ll explore the features provided by the Spring Security framework to test our JWT-based Resource Server applications. Implementing OAuth involves some overhead when processing requests, which we aren’t normally interested in testing. Spring Security provides the means to bypass these infrastructure aspects in our tests, allowing us to focus only - [Lesson 7: Resource Server Multi-Tenancy Support (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-7-resource-server-multi-tenancy-support-text-only) - 1. Goal In the context of OAuth2, Spring Security defines “multi-tenancy” as the ability of a Resource Server (RS) to process Bearer Tokens that have been issued by different Authorization Servers or tenants. This is important to understand, since in other areas, the concept of multi-tenancy might be quite different. To clarify this, imagine our - [Lesson 6: Custom Validators For JWT Claims (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-6-custom-validators-for-jwt-claims-text-only) - 1. Goal In this lesson out of LSSO, we’ll explore how we can define a custom validator for the JWT claims bundled within the token payload. 2. Lesson Notes The relevant module we need to import when we’re starting with this lesson is: lsso-module3/custom-validators-for-jwt-claims-start If we want to have a look at the fully implemented - [Lesson 5: Custom Authorities From JWT Claims (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-5-custom-authorities-from-jwt-claims-text-only) - 1. Introduction In this lesson, we’ll explore the functionality that Spring Security provides to manually extract authorities from a JWT token in a Resource Server. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module3/custom-authorities-from-jwt-claims-start If you want to have a look at the fully implemented lesson - [Lesson 4: Accessing JWT Bearer Token Authentication Attributes Using SpEL (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-4-accessing-jwt-bearer-token-authentication-attributes-using-spel-text-only) - 1. Goal In this lesson, we'll learn how to access Token attributes in our Resource Server application using Spring Expression Language. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module3/accessing-token-authentication-attributes-spel-start If you want have a look at the fully implemented lesson, as a reference, feel free - [Lesson 3: Accessing JWT Bearer Token Authentication Attributes (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-accessing-jwt-bearer-token-authentication-attributes-text-only) - 1. Goal In this lesson, we'll learn how to access Token attributes in our Resource Server application. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module3/accessing-token-authentication-attributes-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: lsso-module3/accessing-token-authentication-attributes-end We'll - [Lesson 2: Verify/Validate Claims from the JWT (Text-Only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-verify-validate-claims-from-the-jwt-text-only) - 1. Goal In this lesson, we’re going to look at JWT Claim validation in Spring. 2. Lesson Notes The relevant module you need to import when you're working with this lesson is: lsso-module3/verify-validate-claims-jwt. This lesson only needs a single reference codebase, so there is no end version of the project. Additionally, before getting started, let’s - [Lesson 5: JWT Support (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-5-jwt-support-text-only) - 1. Goal In this lesson, we'll learn about the different Resource Servce Configurations that Spring Security offers to use JWT (JSON Web Tokens). 2. Lesson Notes The relevant module you need to import when you're working with this lesson is: lsso-module2/jwt-support This lesson only needs a single reference codebase, so there is no end version - [Lesson 4: The New Resource Server Support - part 2](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-4-the-new-resource-server-support-part-2) - https://vimeo.com/1093290482?share=copy 2.4. Accessing Secured Resources At this point, our application is completely functional so we can start it. By default, all the endpoints will be secured and we need to send an Access Token to access them. Let’s obtain the token. In Postman, we have a couple of predefined requests to simulate the Authorization Code - [Lesson 4: The New Resource Server Support - part 1](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-4-the-new-resource-server-support-part-1) - https://vimeo.com/1093290420?share=copy 1. Goal In this lesson, we’ll build a simple Resource Server using the new OAuth stack in Spring Security 5. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module2/resource-server-start. If you want to have a look at the fully implemented lesson, as a reference, feel free - [Lesson 3: The New OAuth2 Client Support - part 2](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-the-new-oauth2-client-support-part-2) - https://vimeo.com/1093290300?share=copy 2.2. The WebClient Bean The goal of this Client application is to be able to consume the Resource Server on behalf of the user and so, what we’ll need here is a simple HTTP client. Instead of using any plain HTTP client and having to deal with sending the token manually we’ll make use of - [Lesson 3: The New OAuth2 Client Support - part 1](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-the-new-oauth2-client-support-part-1) - https://vimeo.com/1093290210?share=copy 1. Goal In this lesson, we’ll implement the Client as part of the simple OAuth application we’re building here. We’re going to use the new OAuth stack here as we now have full Client support rolled out. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module2/oauth-client-start. - [Lesson 4: Setting up the Project (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-4-setting-up-the-project-text-only) - 1. Goal In this lesson we’ll have a look at how to setup our development environment to work with the Learn Spring Security OAuth course. 2. Lesson Notes More precisely, in this lesson we'll have a look at the tools and technologies we'll need to work on the different topics and the code repository containing - [Lesson 2: Picking the Right OAuth Grant Type/Flow to Use (theory)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-picking-the-right-oauth-grant-type-flow-to-use-theory) - https://vimeo.com/1093000025?share=copy 1. Goal In this lesson, we’re going to focus on how to pick the right OAuth 2 Grant Type for different types of applications and different scenarios. 2. Lesson Notes It's worth mentioning before we get started that the decision flow we present here is a simplified and updated version of the traditional OAuth - [Lesson 1: Intro to OAuth2 and the OAuth2 Roles (theory) (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-intro-to-oauth2-and-the-oauth2-roles-theory-text-only) - 1. Goal In this lesson, we are going to have a high-level look at the OAuth2 framework. The details will come later; here we’re simply going to focus on the core concepts of OAuth. 2. Lesson Notes 2.1. What is OAuth2? OAuth2 is basically a standard for authorization, not authentication. It’s critical to distinguish between these - [The New OAuth Material, Release Schedule and Text-Only Lessons](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/the-new-oauth-material-release-schedule-and-text-only-lessons) - If you're getting started with OAuth2 now, or if you're an OAuth veteran - understanding the current landscape of OAuth in Spring Security is critical. The Big Rewrite Simply put, the Spring Security core team has decided to re-write and consolidate the OAuth2 support in the framework. That's very rare - it almost never happens - [Course Changelog](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/course-changelog-6) - We’re committed to offering a high-quality and useful course. For this, we’re constantly upgrading and improving the content, and adding new material to the curriculum. Here is a summarized list of the latest improvements we've made to the course: 2024 Jul Upgrade to Java 21 Upgrade to Spring Boot 3.3 May Upgrade to Keycloak 19 - [How I keep the courses updated](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/how-i-keep-the-courses-updated-2) - I recorded the lessons using Spring Boot 2.3.x and the codebase matches this version exactly - so that you can easily follow along to the videos step by step. However, since the Spring framework is frequently updated, I am also maintaining a version of the codebase that uses the latest Spring and Spring Boot versions. For - [The Project in your IDE](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/the-project-in-your-ide) - 1. Overview The primary IDE I used for the course is Eclipse. The project code is of course a Maven project, so you can use any IDE you want. If you are going to use Eclipse, I recommend using the STS distribution. And I generally recommend using the latest version here. In each lesson, I'll use - [Course Introduction](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/course-introduction-7) - 1. Course Modules Each Module is organized in several video Lessons - containing lesson notes and other resources. The material is meant to be experienced as video, and the lesson notes should be used as a reference not as comprehensive documentation. 1.1. How to Consume the Material First The first time you go through the lessons, - [Mindset and How to Go Through the Course Material](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/mindset-and-how-to-go-through-the-course-material-5) - About 2000 students have gone through this course at this point. I've talked to most of them, one way or another. Yes, I spent a lot of time answering email :) And, naturally, I'm seeing trends. The "start-to-finish" student First, there are the students who, after making the investment in the course, are committed to - [Lesson](https://www.baeldung.com/members/lessons/lesson-3) - [Lesson](https://www.baeldung.com/members/lessons/lesson-2) - [Lesson 7: The Client Credentials Flow (text-only)](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-7-the-client-credentials-flow-text-only) - 1. Goal In this lesson we'll consider another core flow in OAuth, namely the so-called Client Credentials flow. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: lsso-module5/client-credentials-flow-start If you want to have a look at the fully implemented lesson, as a reference, feel free to import: - [Lesson 7: Intro to the JdbcTemplate (implementation) (text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-7-intro-to-the-jdbctemplate-implementation-text-only) - 1. Goals In this lesson, we're going to see the JdbcTemplate class in action as a means of handling persistence with Spring. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: intro-jdbctemplate-start If you want to have a look at the fully implemented lesson, as a reference, - [Lesson 6: Intro to the JdbcTemplate (theory) (text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-intro-to-the-jdbctemplate-theory-text-only) - 1. Goal In this lesson, we’re going to introduce a new approach to access data in Spring: using the JdbcTemplate. 2. Lesson Notes We'll focus only on analyzing how it differentiates from the techniques we've been using up to this point, and in understanding its basic operation. Therefore, there is no need to checkout anything from - [Lesson 5: Transactions in Spring (text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-transactions-in-spring-text-only) - 1. Goal In this lesson, we'll learn about transactions in Spring. We'll base this lesson on our already existing knowledge of Spring Data Repositories. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: transactions-in-spring-start If you want have a look at the fully implemented lesson, as a - [Lesson 4: Spring with JPA and Hibernate](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-spring-with-jpa-and-hibernate) - https://vimeo.com/1092743993?share=copy 1. Goals In previous lessons, we focused on Spring Data JPA. In this lesson, let’s talk about JPA with Spring without using the Spring Data project. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m5-spring-with-jpa-and-hibernate-start If you want have a look at the fully implemented - [Lesson 3: Pagination and Sorting](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-pagination-and-sorting) - https://vimeo.com/1092742447?share=copy 1. Goals In this lesson, we'll we’ll learn about how to do pagination and sorting operations using Spring Data. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m5-pagination-and-sorting-start If you want have a look at the fully implemented lesson, as a reference, feel free to - [Lesson 2: Beyond the Default Repository](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-beyond-the-default-repository) - https://vimeo.com/1092741926?share=copy 1. Goals In this lesson, we'll move beyond the basic operations and implement complex data access queries using Spring Data. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m5-beyond-the-default-repository-start If you want have a look at the fully implemented lesson, as a reference, feel free - [Lesson 1: Project Persistence with Spring Data JPA](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-project-persistence-with-spring-data-jpa) - https://vimeo.com/1092740332?share=copy Note: There is an Upgrade Notes and Errata sections below for this video. 1. Goals In this module we’ll start focusing on persistence and learn about how Spring handles persistence and data access operations. In this first lesson, we’ll look into the basics of Spring Data JPA, which is a powerful option for persistence - [REST Reference Project with Gradle (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/rest-reference-project-with-gradle-text-only) - Overview In this project, we've put together all the concepts that we've seen in the course, so far, using Gradle to build the project. You can import this project as a reference of the final version of the Spring REST application built up until this module: reference-project-rest. Most of the projects in the course use - [REST Reference Project (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/rest-reference-project-text-only) - Overview In this project, we've put together all the concepts that we've seen in the course, so far. You can import this project as a reference of the final version of the Spring REST application built up until this module: reference-project-rest In order to get started after running the app, you may find useful the - [MVC Reference Project (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/mvc-reference-project-text-only) - Overview In this project, we've put together all the concepts that we've seen in the course, so far. You can import this project as a reference of the final version of the Spring MVC application using Thymeleaf that we've built up until this module: reference-project-mvc - [Lesson 8: Spring Proxies (Text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-8-spring-proxies-text-only) - 1. Goal In this lesson, we'll learn about proxy objects and how are they used in Spring. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: spring-proxies-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: spring-proxies-end 2.1. What - [Lesson 7: Spring Security Authorization (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-7-spring-security-authorization-text-only) - 1. Goals In this lesson, we’re going to learn how to setup Authorization in our application using Spring Security. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: spring-security-authorization-start If you want to have a look at the fully implemented lesson, as a reference, feel free to - [Lesson 6: Introduction to Spring Security (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-introduction-to-spring-security-text-only) - 1. Goals In this lesson, we’re going to learn about the basics of Spring Security and use it to secure our MVC application. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: intro-to-spring-security-start If you want have a look at the fully implemented lesson, as a reference, - [Lesson 5: The New Reactive Paradigm in Spring](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-the-new-reactive-paradigm-in-spring) - https://vimeo.com/1092680025?share=copy 1. Goals In this lesson, we’re going to learn about the new Reactive Paradigm introduced along with version 5 of the framework. 2. Lesson Notes 2.1. Moving Data over the Wire We’ve always had the need to handle large amounts of IO efficiently. And, with microservices today, we have a lot more data moving - [Lesson 4: Working with Events and Listeners](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-working-with-events-and-listeners) - https://vimeo.com/1092679838?share=copy 1. Goals In this module, we’re going to focus on the events support in Spring. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m9-working-with-events-and-listeners-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: m9-working-with-events-and-listeners-end 2.1. Overview Simply - [Lesson 3: The Spring Expression Language (SpEL)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-the-spring-expression-language-spel) - https://vimeo.com/1092679601?share=copy 1. Goals In this lesson, we’re going we're going to focus on Spring Expression Language or SpEL. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m9-the-spring-expression-language-start. If you want have a look at the fully implemented lesson, as a reference, feel free to import: m9-the-spring-expression-language-end. - [Lesson 2: Spring AOP in Practice (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-spring-aop-in-practice-text-only) - 1. Goals In this lesson, we’re going we're going to have a look at Spring AOP in action. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: spring-aop-in-practice-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: spring-aop-in-practice-end - [Lesson 1: An Intro to AOP in Spring](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-an-intro-to-aop-in-spring) - https://vimeo.com/1092679327?share=copy 1. Goals In this lesson, we’re going to focus on Aspect Oriented Programming, or AOP, in Spring. 2. Lesson Notes 2.1. Aspect-Oriented Programming (AOP) AOP is, in a way, a different programming paradigm in Java. Simply put, it allows us to isolate common (also called "cross-cutting") concerns in a cleaner way, to decrease tight-coupling - [Lesson 7: Intro to the HTTP Message Converters in Spring MVC (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-7-intro-to-the-http-message-converters-in-spring-mvc-text-only) - 1. Goals In this lesson, we’re going to see how Spring serializes and deserializes the HTTP requests and responses for different media types. Specifically, we'll see that Spring provides out-of-the-box support for converting to and from the most common data representation types like text, JSON, and XML. 2. Lesson Notes The relevant module you need - [Lesson 6: Intro to the RestTemplate](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-intro-to-the-resttemplate) - https://vimeo.com/1092431141?share=copy 1. Goals In this module we’re going to see how we can consume our REST API using an HTTP client. We’re going to be looking at a really common and powerful option to drive our API client: Spring's RestTemplate class. Keep in mind that even though we're using Spring both to implement our API and now - [Lesson 5: Exception Handling in the API - part 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-exception-handling-in-the-api-part-1) - https://vimeo.com/1092430789?share=copy Note: There is an Upgrade Notes section below for this video. 1. Goals In this module, we’re going to see how exception handling is done in a REST API. Specifically, we'll explore different mechanisms in Spring to handle exceptions gracefully and return a correct response back to the client. 2. Lesson Notes The relevant - [Lesson 4: Controllers and URLs - The @RequestParam annotation (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-controllers-and-urls-the-requestparam-annotation-text-only) - 1. Goals In this lesson, we’ll analyze one more Spring MVC Controller annotation that comes into play when building a REST API, the @RequestParam annotation. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: controller-urls-requestparam-start If you want have a look at the fully implemented lesson, as - [Lesson 3: Controllers and URLs - The @PathVariable Annotation (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-controllers-and-urls-the-pathvariable-annotation-text-only) - 1. Goals In this module, we’ll continue with our analysis of the Spring MVC Controller features. More precisely, we'll focus on the @PathVariable annotation. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: controller-urls-pathvariable-start If you want have a look at the fully implemented lesson, as a - [Lesson 2: Controllers and Request/Response (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-controllers-and-request-response-text-only) - 1. Goals In this lesson, we’re going to continue our discussion about the Controller, and explore a few more core Spring MVC annotations that come into play when building a REST API. 2. Lesson Notes The relevant module you need to import when you're working with this lesson is: controller-request-response 2.1. Overview Particularly, in this - [Lesson 1: Controller Basics - part 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-controller-basics-part-2) - https://vimeo.com/1092430640?share=copy To be clear, the base annotation sets the URL to /projects and this method-level annotation sets it to /{id}. Spring will combine them into /projects/{id}. This, by the way, happens with any other attributes, not just the path. 2.5. Narrowing The Mapping We can actually go beyond this by specifying the path and the - [Lesson 5: Spring MVC with the Mustache Template Engine (text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-spring-mvc-with-the-mustache-template-engine-text-only) - 1. Goals In this module, we’re going to look into using the Mustache template engine with Spring. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: spring-mvc-mustache-template-engine-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: spring-mvc-mustache-template-engine-end 2.1. - [Lesson 4: Spring MVC with the FreeMarker Template Engine](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-spring-mvc-with-the-freemarker-template-engine) - https://vimeo.com/1092401813?share=copy Note: There is an Upgrade Notes section below for this video. 1. Goals In this module, we’re going to consider the FreeMarker template engine. We can use it in our traditional Spring MVC application beyond Thymeleaf which we’ve explored in detail in the previous lessons. 2. Lesson Notes The relevant module you need to - [Lesson 3: The Basics of Form Validation](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-the-basics-of-form-validation) - https://vimeo.com/1092401651?share=copy Note: There is an Upgrade Notes section below for this video. 1. Goals In this module, we’re going to consider the basics of form validation. We consider how we can deal with invalid user input using Thymeleaf. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: - [Lesson 2: A Full Create Operation with Thymeleaf](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-a-full-create-operation-with-thymeleaf) - https://vimeo.com/1092401203?share=copy 1. Goals In this module, we’re going to continue expanding our Spring MVC operations along with our Thymeleaf front-end. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m7-full-create-operation-with-thymeleaf-start If you want to have a look at the fully implemented lesson, as a reference, feel free - [Lesson 1: Views, View Resolvers and Templating Engines - part 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-views-view-resolvers-and-templating-engines-part-2) - https://vimeo.com/1092401049?share=copy LS - Views, View Resolvers and Templating Engines - part 2 - transcript - [Lesson 1: Views, View Resolvers and Templating Engines - part 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-views-view-resolvers-and-templating-engines-part-1) - https://vimeo.com/1092400729?share=copy 1. Goals In this module, we’re going to focus on traditional MVC-style applications. In this lesson, we’ll start with the basics of Thymeleaf - a popular templating engine we can use with Spring MVC. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m7-view-resolvers-templating-engines-start If you - [Annex: Introduction to Web Development Concepts (text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/annex-introduction-to-web-development-concepts-text-only-2) - 1. Goals In this lesson, we’ll understand some basic concepts of web development. First, we will learn some fundamental concepts about the web and then we’ll explore some of the technologies around web development. If you're already familiar with these, you can skip this lesson. These concepts are not part of Spring, but they are - [Lesson 6: Servlets and the DispatcherServlet (text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-servlets-and-the-dispatcherservlet-text-only-2) - 1. Goals In this module, we’re going to learn about Servlets and the Dispatcher Servlet in the Spring framework. 2. Lesson Notes The relevant module you need to import when you're working with this lesson is: servlets-and-dispatcherServlet This lesson only needs a single reference codebase, so there is no end version of the project. 2.1. - [Lesson 5: Testing with Boot](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-testing-with-boot-2) - https://vimeo.com/1092373936?share=copy 1. Goals In this lesson, we’re going to focus on what testing support Spring Boot has, on top of the testing support in Spring, which we already discussed earlier. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m6-testing-with-boot-start If you want have a look at - [Lesson 3: An MVC-style Application vs a REST API](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-an-mvc-style-application-vs-a-rest-api-2) - https://vimeo.com/1092373590?share=copy 1. Goals In this lesson, we’re going to talk about architectural styles of building a web application. Specifically, we’ll discuss the REST style of web application and the more traditional Model - View - Controller style. 2. Lesson Notes 2.1. MVC and REST There are many architectural styles we can leverage for building a - [Lesson 1: What is MVC and Spring MVC](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-what-is-mvc-and-spring-mvc-2) - https://vimeo.com/1092373185?share=copy 1. Goals In this lesson, we'll start looking into the web aspects of Spring. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m6-what-is-spring-mvc-lesson-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: m6-what-is-spring-mvc-lesson-end 2.1. Spring MVC - [Lesson 3: Actuators in Boot - Custom Health Indicator (Text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-actuators-in-boot-custom-health-indicator-text-only) - 1. Goals In this lesson, we'll keep on investigating Spring Boot actuators and we'll create our first custom actuator that will extend the basic functionality of the /health actuator. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: actuator-custom-health-indicator-start If you want have a look at the - [Lesson 7: Spring Boot Default Properties (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-7-spring-boot-default-properties-text-only) - 1. Goals In this lesson, we’ll see how Spring Boot defines the configuration properties that allow us to customize the behavior it provides out of the box according to our needs. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: default-properties-start If you want to have a - [Lesson 6: Working with @PropertySource (Text-Only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-working-with-propertysource-text-only) - 1. Goals In this lesson, we'll focus on the @PropertySource annotation. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: working-with-property-source-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: working-with-property-source-end 2.1. Main and Test Property Sources Simply put, - [Lesson 2: Working with Profiles in Spring](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-working-with-profiles-in-spring-2) - https://vimeo.com/1091785947?share=copy 1. Goals In this lesson, we'll learn how to use Spring profiles for creating beans that are only enabled when a specific profile is activated. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m3-working-with-profiles-start If you want have a look at the fully implemented lesson, - [Lesson 1: Working with Properties](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-working-with-properties) - https://vimeo.com/1091785130?share=copy 1. Goals In this lesson, we'll have a look at working with properties in Spring and Spring Boot. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m3-working-with-properties-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: m3-working-with-properties-end - [Lesson 10: Debugging and Solving Wiring Exceptions (Text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-10-debugging-and-solving-wiring-exceptions-text-only) - 1. Goals Previously, we looked at how to create beans and use them in other Spring-managed components. However, problems can arise trying to wire beans, especially when we first start developing with Spring, or when we have to deal with a complex application context. In this lesson, we’ll look at three common wiring exceptions and - [Lesson 9: Spring Wiring - @Resource and @Inject (Text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-9-spring-wiring-resource-and-inject-text-only) - 1. Goals In this lesson, we'll discuss the possibility to wire the beans into the application context using the @Resource and @Inject annotations. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: spring-wiring-resource-and-inject-start If you want have a look at the fully implemented lesson, as a reference, feel - [Lesson 8: The Spring Application Context (extra) (text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-8-the-spring-application-context-extra-text-only) - 1. Goal In this lesson, we'll learn about the Spring ApplicationContext. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: the-spring-application-context-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: the-spring-application-context-end 2.1. What is the Application Context The - [Lesson 7: The BeanPostProcessor and the BeanFactoryPostProcessor (text-only)](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-7-the-beanpostprocessor-and-the-beanfactorypostprocessor-text-only) - 1. Goal In this lesson, we'll learn about the Spring container extension points. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: beanPostProcessor-and-beanFactoryPostProcessor-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: beanPostProcessor-and-beanFactoryPostProcessor-end 2.1. The Spring Container Extension - [Lesson 5: Simple Wiring and Injection - part 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-simple-wiring-and-injection-part-2) - https://vimeo.com/1092025238?share=copy 2.5. @Qualifier Let's see what would happen if we had two repositories that implement our project repository interface. We'll add a second implementation of the ProjectRepository interface, similar to the first one, named ProjectRepositoryImpl2. If we try to run the project now, the startup will fail, with a helpful error message, that shows us - [Lesson 5: Simple Wiring and Injection - part 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-simple-wiring-and-injection-part-1) - https://vimeo.com/1092024990?share=copy 1. Goals In this lesson, we'll have a look at how to wire beans together using Dependency Injection. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m2-simple-wiring-and-injection-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: m2-simple-wiring-and-injection-end - [Lesson 4: Lifecycle of a Bean - Init and Destroy Hooks](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-lifecycle-of-a-bean-init-and-destroy-hooks) - https://vimeo.com/1092024714?share=copy 1. Goals In this lesson, we'll go through the basic concepts of the bean lifecycle in Spring. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m2-lifecycle-of-a-bean-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: m2-lifecycle-of-a-bean-end - [Lesson 3: Defining Beans, Component Scanning and Bean Annotations](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-defining-beans-component-scanning-and-bean-annotations) - https://vimeo.com/1092024224?share=copy 1. Goals In this lesson, we'll focus on how to define beans in Spring and discover them using component scanning. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m2-defining-beans-component-scanning-and-bean-annotations-start If you want have a look at the fully implemented lesson, as a reference, feel free - [Lesson 2: The Basics of Java Configuration and the Spring Context](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-the-basics-of-java-configuration-and-the-spring-context) - https://vimeo.com/1092023788?share=copy 1. Goals In this lesson, we'll discuss the main Spring IoC container - the Spring Application Context. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: m2-basics-of-java-configuration-and-the-spring-context-start If you want have a look at the fully implemented lesson, as a reference, feel free to import: m2-basics-of-java-configuration-and-the-spring-context-end 2.1. Spring - [Lesson 1: What Is DI and How Does It Work in Spring?](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-what-is-di-and-how-does-it-work-in-spring) - https://vimeo.com/1092023342?share=copy 1. Goals In this lesson, we'll focus on understanding the concept of Dependency Injection (DI) and how this work in Spring. 2. Lesson Notes 2.1. What is a Dependency? Before we can talk about Dependency Injection, let’s first define what a dependency is. Understanding this concept is critical not only for Spring, but for - [Lesson 6: Maven and Spring](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-maven-and-spring) - https://vimeo.com/1091758759?share=copy 1. Goals In this lesson, we'll have a look at how our Spring Boot project is set up with Maven. Note that this is not an intro to Maven itself. If you’re new to Maven, have a look at the Resources section for some helpful guides. 2. Lesson Notes The relevant module for this - [Lesson 4: A Simple Development Environment](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-a-simple-development-environment) - https://vimeo.com/1091758244?share=copy Note: If you don't have much Java experience or practice with Eclipse and feel that this video is going faster than you can follow, then we suggest going over the written Lesson Notes instead, as these will explain in greater detail how to proceed. Note: There is an Errata section below for this video. - [Lesson 3: Introducing Spring Boot](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-introducing-spring-boot) - https://vimeo.com/1091746845?share=copy 1. Goals In this lesson, we'll focus on understanding the Spring Boot module and the advantages of using Boot to develop Spring applications. 2. Lesson Notes 2.1. What is Spring Boot? Simply put, Boot represents a layer of abstraction on top of the Spring framework. Boot is an extension of the Spring framework that - [Lesson 2: Understanding the Full Spring Ecosystem](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-understanding-the-full-spring-ecosystem) - https://vimeo.com/1091412036?share=copy 1. Goals In this lesson, we'll go through the main modules that Spring offers and understand how they relate to each other to form the Spring ecosystem. 2. Lesson Notes 2.1. The Spring Ecosystem Due to the success of the framework, the Spring ecosystem grew over time. This is now quite vast, as - [Lesson 1: Why Spring?](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-why-spring) - https://vimeo.com/1086799922?share=copy 1. Goals This introductory lesson contains an overview of the Spring framework, including the benefits of using Spring and how to approach learning the framework. 2. Lesson Notes 2.1. What is Spring? Let's start with understanding what Spring actually is. Simply put, Spring is a back-end technology with a broad range of uses, the - [Annex: Introduction to Web Development Concepts (text-only)](https://www.baeldung.com/members/lessons/annex-introduction-to-web-development-concepts-text-only) - [Lesson 6: Servlets and the DispatcherServlet (text-only)](https://www.baeldung.com/members/lessons/lesson-6-servlets-and-the-dispatcherservlet-text-only) - [Lesson 5: Testing with Boot](https://www.baeldung.com/members/lessons/lesson-5-testing-with-boot) - [Lesson 4: Decouple the Controller from Entities](https://www.baeldung.com/members/lessons/lesson-4-decouple-the-controller-from-entities) - [Lesson 3: An MVC-style Application vs a REST API](https://www.baeldung.com/members/lessons/lesson-3-an-mvc-style-application-vs-a-rest-api) - [Lesson 2: Expanding Our First Controller](https://www.baeldung.com/members/lessons/lesson-2-expanding-our-first-controller) - [Lesson 1: What is MVC and Spring MVC](https://www.baeldung.com/members/lessons/lesson-1-what-is-mvc-and-spring-mvc) - [Lesson 5: The Real-World Project We’re Building](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-the-real-world-project-were-building) - https://vimeo.com/1091751637?share=copy Note: If you don't have much Java experience or practice with Eclipse and feel that this video is going faster than you can follow, then we suggest going over the written Lesson Notes instead, as these will explain in greater detail how to proceed. Note: There are Upgrade Notes and Errata sections below for - [Access to the Team packages](https://www.baeldung.com/members/courses/learn-junit-for-teams/lessons/access-to-the-team-packages) - Welcome to Team Package. Please email me at course@baeldung.com to get the custom coupon for your team. Cheers and enjoy the material, Eugen. - [Lesson 5: Decouple the API From the Domain Model](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-5-decouple-the-api-from-the-domain-model) - 1. Goal In this lesson, we’ll analyze how decoupling an API from its underlying domain model can positively impact its evolution. We’ll focus on the role of DTOs, consistently used in previous lessons, to show how this approach allows for smoother updates and greater flexibility in evolving APIs. 2. Lesson Notes The relevant module you - [Lesson 4: Dealing with Changes in the API - Versioning](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-4-dealing-with-changes-in-the-api-versioning) - 1. Goal In this lesson, we'll dive into API versioning. We’ll analyze the complexities that this approach implies, present the different strategies used in practice, and have a quick glimpse at how we implement it in our project. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: - [Lesson 2: Dealing with Changes in the API - Resource Changes](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-dealing-with-changes-in-the-api-resource-changes) - 1. Goal In this lesson, we'll explore how to deal with different types of changes in the Resources of our API, especially trying to reduce the impact it could have on the clients consuming our service. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is dealing-with-changes-in-the-api-resource-changes. Additionally, - [Lesson 1: Evolution of a REST API](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-evolution-of-a-rest-api) - 1. Goal This lesson aims to provide a comprehensive, high-level understanding of API evolution, highlighting the significance of managing changes effectively to ensure seamless application integration and functionality. In this lesson, we’ll discuss the complexities of API evolution, breaking and non-breaking changes, and backward compatibility. Then we’ll explore the strategies to navigate these changes effectively. - [Lesson 3: Discover a REST API - HATEOAS](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-discover-a-rest-api-hateoas) - 1. Goal In this lesson, we’ll learn the basics of building a hypermedia-driven RESTful API using Spring HATEOAS to introduce discoverability features in the service. 2. Lesson notes The relevant module you need to import when you're starting with this lesson is: discover-rest-api-hateoas-start. If you want to have a look at the fully implemented lesson - [Lesson 2: Document the API with Swagger and OpenAPI](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-document-the-api-with-swagger-and-openapi) - 1. Goal The primary objective of this lesson is to dig deeper into documenting an API. We’ll explore a simple, useful, and popular approach to implementing clear, standardized, and interactive API documentation for our API almost automatically. Namely, we’ll learn how to use OpenAPI and Swagger in a Spring Boot application to generate and visualize - [Lesson 1: Document vs Discover a REST API](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-document-vs-discover-a-rest-api) - 1. Goal In this lesson, we’ll learn the basics of documenting an API, how to make it discoverable, and how these two different approaches are associated. We’ll also have a look at the Richardson Maturity Model as a step towards implementing a RESTful architecture, introducing HATEOAS in this process. 2. Lesson Notes There’s no code - [Lesson 6: Mechanisms to Simplify Contract Test Cases](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-6-mechanisms-to-simplify-contract-test-cases) - 1. Goal In this lesson, we'll explore how to simplify our contract tests by extracting common procedures and creating generic helper functionality to test any APIs. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: mechanisms-to-simplify-contract-test-cases-start. If you want to have a look at the fully implemented - [Lesson 5: Contract Testing - A Special Kind Of Test](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-5-contract-testing-a-special-kind-of-test) - 1. Goal The goal of this lesson is to introduce a different and very useful kind of test: contract tests. We’ll see how these differ from the DTO-based end-to-end tests we developed in previous lessons to clearly understand the pros and cons, and determine when to use each approach. 2. Lesson Notes The relevant module - [Lesson 4: Mechanisms to Simplify End-to-End Test Cases](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-4-mechanisms-to-simplify-end-to-end-test-cases) - 1. Goal In this lesson, we'll explore how to simplify our end-to-end tests by extracting common procedures and creating generic helper functionality that can be used to test any APIs. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: mechanisms-to-simplify-end-to-end-test-cases-start. If you want to have a look - [Lesson 3: How To Test HTTP Semantics](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-how-to-test-http-semantics) - 1. Goal In this lesson, we’ll be learning how to test HTTP semantics and verbs using WebTestClient. We’ll then go deeper into how to test different HTTP aspects, such as HTTP operations, how to pass an input request body, trigger input validations, etc. 2. Lesson Notes The relevant module you need to import when you're - [Lesson 2: WebTestClient API Assertions](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-webtestclient-api-assertions) - 1. Goal In this lesson, we’ll dive deeper into assertions with the WebTestClient. Mainly, we’ll learn how we can verify the body content of the responses, which is usually the most dynamic and important aspect of an API. To keep things simple on this aspect, we’ll test only the GET methods of our API, and - [Lesson 2: Working with Profiles in Spring](https://www.baeldung.com/members/lessons/lesson-2-working-with-profiles-in-spring) - [Lesson 5: Spring and the Problem Details Spec](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-5-spring-and-the-problem-details-spec) - 1. Goal This lesson aims to explore the support that Spring provides for the “Problem Details” specification. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: spring-and-problem-details-spec-start If you want to have a look at the fully implemented lesson as a reference, feel free to import: spring-and-problem-details-spec-end Additionally, - [Lesson 4: Validation Groups for Different API Operations](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-4-validation-groups-for-different-api-operations) - 1. Goal In this lesson, we’ll analyze a more advanced input validation feature, which will allow us to cover different constraint requirement scenarios for our Resources. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: validation-groups-for-different-api-operations-start. If you want to have a look at the fully implemented - [Lesson 3: The Basics of Input Validation](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-the-basics-of-input-validation) - 1. Goal An application is only as good as the data it handles. As developers, we’re responsible for validating the data it receives and ensuring its integrity. In this lesson, we’ll focus on input validation. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: basics-of-input-validation-start. If you - [Lesson 2: Global API Exception Handling](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-global-api-exception-handling) - 1. Goal In this lesson, we’ll learn how to handle exceptions globally. We’ll move the controller-based exception handler functionality into a single global exception handler class. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: global-api-exception-handling-start. If you want to have a look at the fully implemented - [Lesson 1: Exception Handling and Sane HTTP Status Codes](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-exception-handling-and-sane-http-status-codes) - 1. Goal In this lesson, we’ll analyze the relevant HTTP Status Codes semantics related to error management scenarios. We’ll explore the support provided by Spring and Spring Boot to retrieve relevant and meaningful HTTP status codes. On the technical side, we’ll be focusing on error handling at the Controller level. 2. Lesson Notes The relevant - [Lesson 3: Good URI Practices (theory)](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-good-uri-practices-theory) - 1. Goal In this lesson, we'll learn about good practices when creating URIs for a web application. The topics that we'll discuss are part of a more general task, which is designing a good API. We'll try to outline some general considerations, as well as explore the most common pitfalls and tradeoffs we'll run into - [Lesson 2: Leverage HTTP Verbs and Semantics in REST API Operations](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-leverage-http-verbs-and-semantics-in-rest-api-operations) - 1. Goal In this lesson, we’ll learn how to put HTTP semantics and Spring’s support into practice to define a REST API correctly and cleanly. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: leverage-http-in-rest-operations-start. If you want to have a look at the fully implemented lesson - [Lesson 1: HTTP Verbs and Semantics With Spring](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-http-verbs-and-semantics-with-spring) - 1. Goal In this lesson, we’ll learn the foundational aspects of building a REST API, having a good grasp and understanding of the HTTP spec, and the HTTP semantics and verbs to use when designing that API. First, we’ll clear up how REST relates to HTTP. Then we’ll explore the different annotations offered by the - [Lesson 3: The Web Configuration](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-the-web-configuration) - 1. Goal In this lesson, we’ll explore the web setup in our project. The “web” (or “presentation”) layer is the one encompassing most of the REST-related aspects. We’ll analyze the dependencies that our project uses, the structure of the “web” layer, how the application is configured to work as a web server, and the components - [Lesson 2: The Project We’re Building](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-the-project-were-building) - 1. Goal In this lesson, we’ll explore the Spring Boot project we’ll be using throughout the course. 2. Lesson Notes The relevant module you need to import when you're working with this lesson is: the-project-we're-building This lesson only needs a single reference codebase, so there’s no end version of the project. 2.1. The Project Setup - [Lesson 1: The Anatomy of a REST API (theory)](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-the-anatomy-of-a-rest-api-theory) - 1. Goal In this theory lesson, we’ll learn the foundational aspects of REST, its constraints, and what it means to define a RESTful API. 2. Lesson Notes There’s no code you need to check out to follow along in this lesson. 2.1. What is REST REST stands for “Representational State Transfer”, and it’s an architectural - [Course Changelog](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/course-changelog-3) - We’re committed to offering a high-quality and useful course. For this, we’re constantly upgrading and improving the content, and adding new material to the curriculum. Here is a summarized list of the latest improvements we've made to the course: 2024 Jul Upgrade to Java 21 May New lesson! Evolve the REST API - Decouple the - [Mindset and How to Go Through the Course Material](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/mindset-and-how-to-go-through-the-course-material-3) - About 8000 students have gone through this course at this point. I've talked to most of them, one way or another. Yes, I spent a lot of time answering email :) And, naturally, I'm seeing trends. The "start-to-finish" student First, there are the students who, after making the investment in the course, are committed to - [Course Introduction](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/course-introduction-4) - Prerequisites Here are a few things it's important to understand before you get started: the core Java language - medium-level Spring - basic level (if you need to brush up on the fundamentals of Spring and Spring Boot, have a look at Learn Spring) Maven - basic level an IDE (Eclipse, IntelliJ, etc) - basic level - [Course Changelog](https://www.baeldung.com/members/courses/learn-spring/lessons/course-changelog-5) - We’re committed to offering a high-quality and useful course. For this, we’re constantly upgrading and improving the content, and adding new material to the curriculum. Here is a summarized list of the latest improvements we've made to the course: 2024 Jul Upgrade to Java 21 Apr Upgrade to Spring Boot 3.2 2023 Apr Upgrade to - [How I Keep the Course Updated](https://www.baeldung.com/members/courses/learn-spring/lessons/how-i-keep-the-course-updated-2) - I recorded the lessons using Spring Boot 2.1.x and the codebase matches this version exactly - so that you can easily follow along to the videos step by step. However, since the Spring framework is frequently updated, I am also maintaining a version of the codebase that uses the latest Spring and Spring Boot versions. - [Mindset and How to Go Through the Course Material](https://www.baeldung.com/members/courses/learn-spring/lessons/mindset-and-how-to-go-through-the-course-material-4) - About 1500 students have gone through this course at this point. I've talked to most of them, one way or another. Yes, I spent a lot of time answering email :) And, naturally, I'm seeing trends. The "start-to-finish" student First, there are the students who, after making the investment in the course, are committed to - [Course Introduction](https://www.baeldung.com/members/courses/learn-spring/lessons/course-introduction-6) - 1. Course Modules Each Module is organized into several video Lessons - containing lesson notes and other resources. The material is meant to be experienced as video, and the lesson notes should be used as a reference, not as comprehensive documentation. Each lesson is very focused on explaining a single concept. This means some concepts are - [Lesson](https://www.baeldung.com/members/lessons/lesson) - [Access to the Team packages of Learn Spring Data JPA](https://www.baeldung.com/members/courses/learn-spring-data-jpa-for-teams/lessons/access-to-the-team-packages-of-learn-spring-data-jpa) - Welcome to Learn Spring Data JPA - Team. Please email me at course@baeldung.com to get the custom coupon for your team. Cheers and enjoy the material, Eugen. - [Lesson 3: Dynamic Tests](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-3-dynamic-tests) - 1. Overview In this lesson, we’ll explore JUnit 5’s capability to create and execute tests programmatically. We’ll start by using the @TestFactory annotation alongside the static factory method dynamicTest(). Dynamic tests are particularly well-suited for scenarios where the data source isn't fixed. To demonstrate this, we’ll work through a use case where the test data - [Lesson 2: Parameterized Tests](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-2-parameterized-tests) - 1. Overview In this lesson, we’ll learn about parameterized tests — a powerful feature of the JUnit 5 framework. We’ll start with a simple example where test parameters are defined inline, via the @ValueSource annotation. After that, we’ll explore various value sources for test inputs, including enums, special cases, fields, methods, CSV files, and custom - [Lesson 1: Repeating Tests](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-1-repeating-tests) - 1. Overview In this lesson, we explore the @RepeatedTest annotation in JUnit 5, which allows us to run the same test multiple times. We'll explore how repeated execution helps uncover consistency issues and intermittent failures, commonly known as "flaky tests". Then, we'll look at a simple example and discuss how to configure custom naming for - [Lesson 5: Entity Graphs](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-5-entity-graphs) - 1. Goals In this lesson out of Learn Spring Data JPA, we'll be looking at how Entity Graphs are supported in Spring Data JPA, briefly exploring the different ways that Entity Graphs can be defined and loaded. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: entity-graphs-start - [Lesson 4: Auditing](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-4-auditing) - 1. Goals In this lesson, we'll explore how we can capture auditing information of our entities using Spring Data JPA features. We'll study how we may instruct the framework to automatically track when and by whom an entity gets created or updated. 2. Lesson Notes The relevant module you need to import when you're starting - [Lesson 2: Spring Data and Transactions](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-spring-data-and-transactions) - 1. Goals In this lesson, we'll explore what Database Transactions are, why we need them, and how Spring Data supports them. Even though we’ll briefly review some of the basic concepts, we recommend having some familiarity with Database Transactions in order to fully understand this lesson. The Resources section contains links for additional reading. 2. - [Lesson 1: Custom Methods in Repositories](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-custom-methods-in-repositories) - 1. Goals In this lesson, we'll learn how to customize Spring Data Repositories, which is a rather advanced feature. We’ve seen how Spring Data JPA provides powerful capabilities to create queries with little to no coding required. However, sometimes these features may not fulfill our requirements, and we need a mechanism that gives us more - [Lesson 3: Query DSL](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-query-dsl) - 1. Goals In this lesson out of Learn Spring Data JPA, we’ll learn how we can integrate Querydsl with Spring Data JPA, and execute Querydsl Predicates from within our JPA Repositories with minimal changes. We’ll wrap up by considering some things we have to keep in mind when we use Querydsl on a Spring Data - [Lesson 2: Using Query by Example](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-using-query-by-example) - 1. Goals In this lesson, we’ll learn how to use the Query by Example functionality in Spring. We'll explain the main steps when using this API and show its advantages and disadvantages. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: using-query-by-example-start If you want to have - [Lesson 1: Building Queries with Specifications](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-building-queries-with-specifications) - 1. Goals In this lesson, we’ll introduce Spring JPA Specifications, explaining what a Specification is conceptually, and showing how we can implement it using framework support. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: building-queries-with-specifications-start If you want to have a look at the fully implemented - [Lesson 3: Sorting With @Query](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-sorting-with-query) - 1. Goals In this lesson, we’ll learn how to sort entities when we use the @Query annotation in Spring Data JPA. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: sorting-with-query-lesson-start If you want to have a look at the fully implemented lesson, as a reference, feel - [Lesson 2: Sorting](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-sorting) - 1. Goals In this lesson, we’ll learn how we can sort queried entities with Spring Data JPA. Database engines are optimized to perform this task very effectively, so it's usually a good decision to rely on them to order the data when possible. In the previous lesson, we looked at two convenience methods that Spring - [Lesson 1: Pagination and Sorting Support](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-pagination-and-sorting-support) - 1. Goals In this lesson, we’ll look at how Spring Data JPA supports pagination and sorting. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: pagination-and-sorting-support-lesson-start If you want to have a look at the fully implemented lesson, as a reference, feel free to import: pagination-and-sorting-support-lesson-end 2.1. Introduction - [Lesson 5: Returning a Custom Object from a Query](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-5-returning-a-custom-object-from-a-query) - 1. Goals In this lesson, we'll learn how we can return custom objects when making queries. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: returning-custom-object-start If you want to have a look at the fully implemented lesson, as a reference, feel free to import: returning-custom-object-end 2.1. Projections - [Lesson 1: Using @Query](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-using-query) - 1. Goals In this lesson from Learn Spring Data, we’ll learn about Spring Data JPA’s @Query annotation. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: using-query-start If you want to have a look at the fully implemented lesson, as a reference, feel free to import: using-query-end 2.1. - [Lesson 6: Spring Data JPA Delete Methods](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-6-spring-data-jpa-delete-methods) - 1. Goals In this lesson from Learn Spring Data, we’ll explore how we can remove entries from the database using Spring Data JPA. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: delete-methods-start If you want to have a look at the fully implemented lesson, as a - [Lesson 5: Spring Data JPA Save Methods](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-5-spring-data-jpa-save-methods) - 1. Goals In this lesson, we're going to explore different operations for persisting new entities and updating existing ones. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: save-methods-start If you want to have a look at the fully implemented lesson, as a reference, feel free to - [Lesson 4: Deep Dive Into Derived Query Methods](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-4-deep-dive-into-derived-query-methods) - 1. Goals Welcome to this lesson from Learn Spring Data, where we’ll deep dive into the derived query methods of Spring Data JPA. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: deep-dive-into-derived-query-methods-start If you want to have a look at the fully implemented lesson, as a - [Lesson 3: Derived Query Methods](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-derived-query-methods) - 1. Goals In this lesson, we’ll explore Spring Data JPA’s derived query methods. We'll discuss the naming convention, which is the cornerstone of this feature. 2. Lesson Notes The relevant module you need to import when you're starting with this lesson is: derived-query-methods-start If you want to have a look at the fully implemented lesson, - [Lesson 2: Introduction to Spring Data JPA Repositories](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-introduction-to-spring-data-jpa-repositories) - 1. Goals Welcome to a new lesson from the Learn Spring Data course. In this lesson, we'll learn about Spring Data JPA Repositories. This is a core topic in Spring Data and the Spring Data JPA framework, since they represent the main mechanism for interacting with the database. 2. Lesson Notes The relevant module you - [Lesson 1: Spring Data JPA Setup](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-spring-data-jpa-setup) - 1. Goals In this lesson, we're going to learn how we can configure Spring Data JPA in our applications. Since Spring Boot greatly simplifies the configuration, we'll use it in our project, but we’ll also take a closer look to understand what exactly its auto-configuration process does under the hood. 2. Lesson Notes The relevant - [Lesson 3: The Persistence Project We’re Building - part 1](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-the-persistence-project-were-building-part-1-2) - 1. Goals Welcome to a new lesson out of Learn Spring Data. In this lesson, we’ll set up our project and create the domain entities that we’ll use throughout our course. 2. Lesson Notes The relevant module you need to import when you're working with this lesson is: persistence-project This lesson only needs a single - [Lesson 3: The Persistence Project We’re Building - part 2](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-the-persistence-project-were-building-part-2-2) - 2.3. Database Setup Let’s have a look at the database we’ll be using. We chose an H2 in-memory database, which makes it easier to start the project without any additional setup. We’ll add the required dependency to the pom.xml: com.h2database h2 Since we’re using Spring Boot, adding this dependency will auto-configure the H2 database - [Lesson 1: The Java Persistence Ecosystem](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-the-java-persistence-ecosystem-2) - 1. Goals In this lesson, we'll give an overview of the persistence solutions in Java. 2. Lesson Notes 2.1. Overview of Application Persistence Persistence is an essential part of any system, but can also be tricky to get right. This is why there have been multiple approaches introduced over time, each with its own benefits - [Course Changelog](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/course-changelog-4) - We’re committed to offering a high-quality and useful course. For this, we’re constantly upgrading and improving the content, and adding new material to the curriculum. Here is a summarized list of the latest improvements we've made to the course: 2024 Jul Upgrade to Java 21 Apr Upgrade to Spring Boot 3.2 2023 Aug Upgrade to - [Mindset and How to Go Through the Course Material](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/mindset-and-how-to-go-through-the-course-material) - About 1000 students have gone through this course at this point. I've talked to most of them, one way or another. Yes, I spent a lot of time answering email :) And, naturally, I'm seeing trends. The "start-to-finish" student First, there are the students who, after making the investment in the course, are committed to - [Course Introduction](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/course-introduction-5) - Prerequisites Before going through this course, you do need a basic understanding of Java, Spring, as well as JPA/Hibernate. Keep in mind that the material is focused on Spring Data JPA, not the basics of JPA. If you're just getting started with Spring, have a look at the "Learn Spring" course first. You can find an upgrade link - [Upgrade to Baeldung All Access](https://www.baeldung.com/members/lessons/upgrade-to-baeldung-all-access) - Baeldung All Access is, as the name suggests, access to all of the Baeldung courses: Learn Spring REST With Spring Boot Learn Spring Data JPA Learn Spring Security (Core + OAuth) Learn JUnit Learn Maven Learn Hibernate JPA (upcoming) Learn Mockito (upcoming) The goal is for comprehensive and practical learning in a single place.Of course, - [Lesson 4: Repositories](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-4-repositories-2) - 1. Overview Maven relies heavily on repositories to manage dependencies. These repositories are centralized storage for project libraries, plugins, and other build artifacts. In this lesson, let's explore the concept of Maven repositories, their types, configurations, and how they streamline project dependency management. The relevant module we need to import when we're starting with this - [Lesson 3: Maven Dependencies](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-3-maven-dependencies) - 1. Overview In this lesson, we'll explore Maven dependencies, a core concept in Maven that allows us to manage external libraries and frameworks required for a project. Dependencies simplify project development by automating library resolution and ensuring compatibility. They are declared in the POM file, and Maven ensures that the required versions are downloaded and - [Lesson 2: Tests and the Maven Build](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-2-tests-and-the-maven-build) - 1. Overview In this lesson, we'll learn more about the Maven test phase and how we can use the Maven build and JUnit tests to help verify our application. The relevant module we need to import when starting this lesson is tests-and-the-maven-build-start. If we want to have a look at the fully implemented lesson as - [Lesson 2: Building Our Application With Maven](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-2-building-our-application-with-maven) - 1. Overview The goal of this lesson is to introduce additional Maven concepts and finish migrating our sample project to Maven. By the end of this lesson, we'll be able to fully manage every aspect of our project using Maven commands. The relevant module we need to import when we're starting with this lesson is - [Lesson 3: Setting up Maven](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-3-setting-up-maven) - 1. Overview The goal of this lesson is to learn how to set up Maven in our environment. There is no code we need to check out to follow along in this lesson. 2. Prerequisites Maven is a Java application and, as such, it requires JDK 8 or higher to execute. There is no - [Lesson 2: The Java Project We'll Build](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-2-the-java-project-well-build) - 1. Overview The goal of this lesson is to familiarize ourselves with a simple Java project we'll use to learn Maven. We'll introduce the project and see how to use traditional command-line tools to build and run it. Just to be totally clear, we won't be diving into any Maven-related aspect yet. On the contrary, - [Lesson 1 - Introduction to Apache Maven](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-1-introduction-to-apache-maven) - 1. Overview This lesson is an introduction to Apache Maven and some of its core features. Later lessons will examine many of these concepts in depth, but this lesson introduces many of the topics that we'll explore later. There is no code we need to check out to follow along in this lesson. 2. What - [Course Introduction](https://www.baeldung.com/members/courses/learn-maven/lessons/course-introduction-3) - 1. Prerequisites Here are a few things it's important to understand before you get started: the core Java language - basic-level a Text Editor or IDE (Eclipse, IntelliJ, etc) - basic level Git - very basic level 2. Course Modules Each Module is organized into several Lessons - containing lesson notes and other resources. Each - [The 6-month Free IntelliJ License](https://www.baeldung.com/members/courses/baeldung-pro-welcome-lifetime/lessons/the-6-month-free-intellij-license-2) - Thanks for the help from JetBrains - here's the 6-month free license of IntelliJ Ultimate :) The promo code is, of course, BaeldungPro. Enjoy. - [The 6-month Free IntelliJ License](https://www.baeldung.com/members/courses/baeldung-pro-welcome/lessons/the-6-month-free-intellij-license) - Thanks for the help from JetBrains - here's the 6-month free license of IntelliJ Ultimate :) The promo code is, of course, BaeldungPro. Enjoy. - [Lesson 5: Disabling Tests](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-5-disabling-tests) - 1. Overview In this quick and to-the-point lesson, we'll focus on how to disable tests when necessary. We'll start by understanding the purpose of disabling tests. Then, we'll learn how to disable a single test method as well as all tests in the test class. The relevant module we need to import when we're starting - [Lesson 4: Test Naming and Display Name](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-4-test-naming-and-display-name) - 1. Overview In this lesson, we'll learn how to effectively name our test methods and use annotations such as @DisplayName and @DisplayNameGeneration in JUnit 5 to improve the readability and maintainability of our test suites. This will help us understand the importance of meaningful test names, how to apply display names to tests, and how - [Lesson 3: JUnit Assertions](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-3-junit-assertions) - 1. Overview In this lesson, we'll discuss JUnit's Assertions class and go over its basic utility methods in more detail. The relevant module we need to import when we’re starting with this lesson is: junit-assertions-start If we want to have a look at the fully implemented lesson as a reference, feel free to import: junit-assertions-end - [Lesson 3: Writing Tests](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-3-writing-tests) - 1. Overview In this lesson, we'll learn how to write unit tests using the JUnit testing framework. Even though the idea behind tests is to confirm that our project's functionality is working as expected, we'll be defining and checking some trivial logic in this lesson instead. With this, we'll be able to focus only on - [Course Introduction](https://www.baeldung.com/members/courses/learn-junit/lessons/course-introduction-2) - 1. Prerequisites Here are a few things it's important to understand before you get started: the core Java language - medium-level Maven - basic level an IDE (Eclipse, IntelliJ, etc) - basic level Git - very basic level 2. Course Modules Each Module is organized into several Lessons - containing lesson notes and other resources. - [Mindset and How to Go Through the Course Material](https://www.baeldung.com/members/courses/learn-junit/lessons/mindset-and-how-to-go-through-the-course-material-2) - After more than a decade of creating courses for students, naturally, I see different ways students learn. Start-to-finish First, there are the students who, after investing in the course, are committed to learning and using the material in their work. They start at Module 1 - Lesson 1 and work their way through the full - [Upgrade to All Access](https://www.baeldung.com/members/courses/baeldung-pro-welcome/lessons/upgrade-to-all-access) - If you need to upgrade and enroll in All Access, you can do that at dedicated (naturally lower) price-point: >> All Access For Pro Students - [Upgrade to All Access](https://www.baeldung.com/members/courses/baeldung-pro-welcome-lifetime/lessons/upgrade-to-all-access-2) - If you need to upgrade and enroll in All Access, you can do that at dedicated (naturally lower) price-point: >> All Access For Pro Students - [Access to the Classes of All Access Courses](https://www.baeldung.com/members/lessons/access-to-the-classes-of-all-access-courses-2) - You should already be enrolled in all the courses through this All Access package. You can also find all the courses you're enrolled in on the "My Courses" page. Cheers and enjoy the material, Eugen. - [The 6-month Free IntelliJ Ultimate License](https://www.baeldung.com/members/lessons/the-6-month-free-intellij-ultimate-license-2) - Thanks for the help from JetBrains – here’s the 6-month free license of IntelliJ Ultimate 🙂 The promo code is, of course, Baeldung_courses Enjoy, Eugen - [The 6-month Free IntelliJ Ultimate License](https://www.baeldung.com/members/lessons/the-6-month-free-intellij-ultimate-license) - Thanks for the help from JetBrains – here’s the 6-month free license of IntelliJ Ultimate 🙂 The promo code is, of course, Baeldung_courses Enjoy, Eugen - [Access to Baeldung Pro](https://www.baeldung.com/members/lessons/access-to-baeldung-pro) - Baeldung Pro is included in All Access Certification. You can do the checkout on the site with the following coupon: KNmO9BL The coupon is, naturally, 100% off. Enjoy the site and Baeldung Pro :) Cheers, Eugen. - [Access to the Classes of All Access Courses](https://www.baeldung.com/members/lessons/access-to-the-classes-of-all-access-courses) - You should already be enrolled in all the courses through this All Access package. You can also find all the courses you're enrolled in on the "My Courses" page. Cheers and enjoy the material, Eugen. - [Upgrade to Baeldung Pro](https://www.baeldung.com/members/courses/learn-maven/lessons/upgrade-to-baeldung-pro) - Reading Baeldung almost daily? Finally, a clean, ad-free reading experience. Ad-free experiencePro members get absolutely no banner ads, no video pre-rolls, and can enjoy Baeldung entirely ad-free while also supporting the site and the team behind Baeldung. Dark ModeEnjoy dark mode, our second most requested feature. Along with no ads, this is finally the ideal - [Lesson 4: Repositories](https://www.baeldung.com/members/lessons/lesson-4-repositories) - 1. Overview Maven relies heavily on repositories to manage dependencies. These repositories are centralized storage for project libraries, plugins, and other build artifacts. In this lesson, let's explore the concept of Maven repositories, their types, configurations, and how they streamline project dependency management. The relevant module we need to import when we're starting with this - [Lesson 2: Advanced Assertions - Hamcrest](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-2-advanced-assertions-hamcrest) - 1. Overview In this lesson, we'll learn how to improve the assertion part of our tests. We'll start by talking about the assertion message and how it can provide helpful details about the reason for a test's failure. After that, we'll discuss a popular tool that facilitates assertions in the Java world, focusing on Hamcrest - [Lesson 1: Expecting Exceptions](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-1-expecting-exceptions) - 1. Overview As we've seen, correct testing is an integral part of building and growing a codebase. It ensures that our application behaves as expected under various circumstances. And, exceptions are not to be overlooked with that process - handling exceptions well can either be expected behavior or an indication of a problem. In this lesson, - [Lesson 5: Tests and Project Configuration](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-5-tests-and-project-configuration) - 1. Overview In this lesson, we'll learn about the Maven Surefire Plugin and how to use it to automatically run our JUnit tests when building the application. We'll discover that the Surefire plugin is included in the Maven project's effective POM by default and is used during the test phase. Finally, we'll learn how to - [Lesson 4: Testing Our Functionality](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-4-testing-our-functionality) - 1. Overview In this lesson, we'll write our first tests for the application. We'll start by creating small unit tests, focusing on a single method. We'll discuss the structure of a test and the differences between the unit and integration tests. After that, we'll start testing use cases that span across multiple classes and we'll - [Lesson 2: The Project We're Testing](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-2-the-project-were-testing) - 1. Overview In this lesson, we're going to explore the project that we'll be testing throughout this course. We'll explore its configuration, how it's structured, and we'll see the functionality in action by running the project. The relevant module we need to import when we're starting with this lesson is: the-project-we-are-testing. This lesson only needs - [Lesson 1: JUnit Ecosystem](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-1-junit-ecosystem) - 1. Overview In this lesson, we'll get a quick, high-level overview of the basic testing concepts in Java. There is no code we need to check out to follow along in this lesson. 2. Overview of Testing Let’s start with a quick definition - as with any foundational concept, the clarity of a good definition - [Upgrade to Lifetime](https://www.baeldung.com/members/courses/baeldung-pro-welcome/lessons/upgrade-to-lifetime) - If you need to upgrade from your current Yearly subscroption to Lifetime, you should be able to do that here: >> Upgrade to Lifetime Hope that helps. - [Welcome to Pro](https://www.baeldung.com/members/courses/baeldung-pro-welcome-lifetime/lessons/welcome-to-pro-2) - First, thanks for the support, and welcome to Pro :) I hope you've been enjoying the clean reading and learning experience on the site. I've been using it as well, and it's been great to have no ads anywhere in sight. Yeah, I had ads on before :) I've also been using Dark Mode and - [Welcome to Pro](https://www.baeldung.com/members/courses/baeldung-pro-welcome/lessons/welcome-to-pro) - First, thanks for the support, and welcome to Pro :) I hope you've been enjoying the clean reading and learning experience on the site. I've been using it as well, and it's been great to have no ads anywhere in sight. Yeah, I had ads on before :) I've also been using Dark Mode and - [Download REST API with Spring Ebook (PDF)](https://www.baeldung.com/members/lessons/access-rest-api-with-spring-ebook-pdf) - I hope you'll get a lot out of this material - the main reason I wrote it is to help others learn the easy way best practices I got the hard way, during the last decade+ of building web applications with Spring. ## Topics - [Lesson 4: Conditional Test Execution](https://www.baeldung.com/members/topics/lesson-4-conditional-test-execution) - [Course Introduction](https://www.baeldung.com/members/topics/course-introduction) - [Topic](https://www.baeldung.com/members/topics/topic) ## Quizzes - [Learn Java Streams - Module 4 Lesson 7 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson7-anymatch-allmatch-nonematch/quizzes/learn-java-streams-module-4-lesson-7-quiz) - [Learn Java Logging - Module 2 Lesson 3 - Quiz](https://www.baeldung.com/members/courses//lessons/lesson-3-log4j2-appenders-and-layouts/quizzes/learn-java-logging-module-2-lesson-3-quiz) - [Learn Basics - Module 1 Lesson 3- Quiz](https://www.baeldung.com/members/courses//lessons/lesson-3-statements-and-operators/quizzes/learn-basics-module-1-lesson-3-quiz) - [Learn JSON With Jackson - Module 3 Lesson 7 - Quiz](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-7-using-json-views/quizzes/learn-json-with-jackson-module-3-lesson-7-quiz) - [Learn Java Collections - Module 6 Lesson 7 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-7-legacy-collection/quizzes/learn-java-collections-module-6-lesson-7-quiz) - [Learn Java Collections - Module 6 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-4-overview-of-queues/quizzes/learn-java-collections-module-6-lesson-4-quiz) - [Learn JSON With Jackson - Module 2 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-1-custom-property-names-and-order/quizzes/learn-json-with-jackson-module-2-lesson-1-quiz) - [Learn Java Logging - Module 2 Lesson 2 - Quiz](https://www.baeldung.com/members/courses//lessons/lesson-4-log4j2-filters/quizzes/learn-java-logging-module-2-lesson-2-quiz) - [Learn Java Streams - Module 4 Lesson 6 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-6-findfirst-findany/quizzes/learn-java-streams-module-4-lesson-6-quiz) - [Learn Java Collections - Module 6 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-3-generics-a-quick-primer/quizzes/learn-java-collections-module-6-lesson-3-quiz) - [Learn Java Collections - Module 6 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-sequenced-collections/quizzes/learn-java-collections-module-6-lesson-1-quiz) - [Learn Java Collections - Module 6 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-the-collections-class/quizzes/learn-java-collections-module-6-lesson-2-quiz) - [Learn Java Collections - Module 6 Lesson 5 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-5-concurrent-collections/quizzes/learn-java-collections-module-6-lesson-5-quiz) - [Learn Java Logging - Module 2 Lesson 1 - Quiz](https://www.baeldung.com/members/courses//lessons/lesson-1-introduction-to-log4j2/quizzes/learn-java-logging-module-2-lesson-1-quiz) - [Learn Basics - Module 2 Lesson 2 - Quiz](https://www.baeldung.com/members/courses//lessons/lesson-2-loops-and-iteration/quizzes/learn-basics-module-2-lesson-2-quiz) - [Learn Basics - Module 1 Lesson 2- Quiz](https://www.baeldung.com/members/courses//lessons/lesson-2-variables-and-data-types/quizzes/learn-basics-module-1-lesson-2-quiz) - [Learn JSON With Jackson - Module 3 Lesson 5 - Quiz](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-5-introduction-to-the-jackson-streaming-api/quizzes/learn-json-with-jackson-module-3-lesson-5-quiz) - [Learn Java Streams - Module 4 Lesson 5 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-5-count-average-min-max/quizzes/learn-java-streams-module-4-lesson-5-quiz) - [Learn Java Streams - Module 4 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-2-tomap-tolist-toset/quizzes/learn-java-streams-module-4-lesson-2-quiz) - [Learn Basics - Module 2 Lesson 1 - Quiz](https://www.baeldung.com/members/courses//lessons/lesson-1-conditional-statements/quizzes/learn-basics-module-2-lesson-1-quiz) - [Quiz](https://www.baeldung.com/members/quizzes/quiz-6) - [Learn Java Streams - Module 1 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-3-functional-interfaces-and-lambdas-in-java/quizzes/learn-java-streams-module-1-lesson-3-quiz) - [Learn Java Logging - Module 1 Lesson 2 - Quiz](https://www.baeldung.com/members/courses//lessons/lesson-2-introduction-to-java-util-logging-jul/quizzes/learn-java-logging-module-1-lesson-2-quiz) - [Learn Java Collections - Module 4 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-3-linkedhashset-preserving-insertion-order/quizzes/learn-java-collections-module-4-lesson-3-quiz) - [Learn Java Collections - Module 5 Lesson 5 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-5-treemap-sorted-maps-and-natural-ordering/quizzes/learn-java-collections-module-5-lesson-5-quiz) - [Learn Basics - Module 1 Lesson1- Quiz](https://www.baeldung.com/members/courses//lessons/lesson-4-basic-input-and-output/quizzes/learn-basics-module-1-lesson1-quiz-2) - [Learn Java Collections - Module 4 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-4-treeset-sorted-set-and-natural-ordering/quizzes/learn-java-collections-module-4-lesson-4-quiz) - [Learn Java Collections - Module 5 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lessons-4-linkedhashmap-maintaining-insertion-order/quizzes/learn-java-collections-module-5-lesson-4-quiz) - [Learn Basics - Module 1 Lesson1- Quiz](https://www.baeldung.com/members/courses//lessons/lesson-1-introduction-to-java/quizzes/learn-basics-module-1-lesson1-quiz) - [Quiz](https://www.baeldung.com/members/quizzes/quiz-5) - [Learn Java Streams - Module 3 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-3-sorted-distinct/quizzes/learn-java-streams-module-3-lesson-3-quiz) - [Learn Java Collections - Module 5 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-3-iterating-over-hashmaps/quizzes/learn-java-collections-module-5-lesson-3-quiz) - [Learn Basics - Module 2 Lesson 3 - Quiz](https://www.baeldung.com/members/courses//lessons/lesson-3-arrays/quizzes/learn-basics-module-2-lesson-3-quiz) - [Learn Java Streams - Module 3 Lesson 5 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-5-peek/quizzes/learn-java-streams-module-3-lesson-5-quiz) - [Learn Java Logging - Module 1 Lesson 1 - Quiz](https://www.baeldung.com/members/courses//lessons/lesson-1-the-importance-of-logging/quizzes/learn-java-logging-module-1-lesson-1-quiz) - [Learn Java Streams - Module 3 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-2-map-flatmap/quizzes/learn-java-streams-module-3-lesson-2-quiz) - [Learn Mockito - Module 3 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-2-common-pitfalls-with-mockito/quizzes/learn-mockito-module-3-lesson-2-quiz) - [Learn Hibernate and JPA - Module 3 Lesson 3- Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-3-the-entity-lifecycle/quizzes/learn-hibernate-and-jpa-module-3-lesson-3-quiz) - [Learn Mockito - Module 3 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-1-behavior-driven-development-bdd-with-mockito-2/quizzes/learn-mockito-module-3-lesson-1-quiz-2) - [Learn JSON With Jackson - Module 2 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-3-handling-unknown-properties/quizzes/learn-json-with-jackson-module-2-lesson-3-quiz) - [Learn Java Collections - Module 4 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-basic-hashset-operations/quizzes/learn-java-collections-module-4-lesson-2-quiz) - [Quiz](https://www.baeldung.com/members/quizzes/quiz-4) - [Quiz](https://www.baeldung.com/members/quizzes/quiz-3) - [Learn Hibernate and JPA - Module 3 Lesson 5 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-5-criteria-api/quizzes/learn-hibernate-and-jpa-module-3-lesson-5-quiz) - [Learn Hibernate and JPA - Module 3 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-4-jpql-jakarta-persistence-query-language/quizzes/learn-hibernate-and-jpa-module-3-lesson-4-quiz-2) - [Learn Mockito - Module 3 Lesson 1 - Quiz](https://www.baeldung.com/members/quizzes/learn-mockito-module-3-lesson-1-quiz) - [Learn Java Collections - Module 3 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-3-sorting-collections-with-comparable-and-comparator/quizzes/learn-java-collections-module-3-lesson-3-quiz) - [Learn JSON With Jackson - Module 1 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-3-objectmapper-configuration/quizzes/learn-json-with-jackson-module-1-lesson-3-quiz) - [Learn Java Streams - Module 3 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-1-filter/quizzes/learn-java-streams-module-3-lesson-1-quiz) - [Learn Java Streams - Module 3 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-4-limit-skip/quizzes/learn-java-streams-module-3-lesson-4-quiz) - [Learn Java Collections - Module 5 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-basic-hashmap-operations/quizzes/learn-java-collections-module-5-lesson-2-quiz) - [Learn JSON With Jackson - Module 2 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-4-handling-date-and-time-values/quizzes/learn-json-with-jackson-module-2-lesson-4-quiz) - [Learn Hibernate and JPA - Module 3 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-2-entity-relationships-and-operations/quizzes/learn-hibernate-and-jpa-module-3-lesson-2-quiz) - [Learn Spring Data JPA - Quiz - Module 1 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-overview-of-spring-data-jpa-2/quizzes/learn-spring-data-jpa-quiz-module-1-lesson-2-2) - [Learn Java Collections - Module 5 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-introduction-to-hashmap/quizzes/learn-java-collections-module-5-lesson-1-quiz) - [Learn Hibernate and JPA - Module 1 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-3-setting-up-hibernate-and-jpa/quizzes/learn-hibernate-and-jpa-module-1-lesson-3-quiz) - [Learn Hibernate and JPA - Module 1 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-2-the-project-overview/quizzes/learn-hibernate-and-jpa-module-1-lesson-2-quiz) - [Learn Hibernate and JPA - Module 1 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-1-orm-concepts-and-introduction/quizzes/learn-hibernate-and-jpa-module-1-lesson-1-quiz) - [Learn JSON With Jackson - Module 1 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-2-basic-serialization-and-deserialization/quizzes/learn-json-with-jackson-module-1-lesson-2-quiz) - [Learn Java Streams - Module 2 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-2-intermediate-and-terminal-operations/quizzes/learn-java-streams-module-2-lesson-2-quiz) - [Learn Java Streams - Module 1 Lesson 2 - Quiz](https://www.baeldung.com/members/quizzes/learn-java-streams-module-1-lesson-2-quiz) - [Learn JSON With Jackson - Module 2 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-2-controlling-json-inclusion-exclusion/quizzes/learn-json-with-jackson-module-2-lesson-2-quiz) - [Quiz](https://www.baeldung.com/members/quizzes/quiz-2) - [Learn JSON With Jackson - Module 1 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-1-introduction-to-jackson/quizzes/learn-json-with-jackson-module-1-lesson-1-quiz) - [Learn Hibernate and JPA - Module 2 Lesson 6 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-6-inheritance-mapping-advanced/quizzes/learn-hibernate-and-jpa-module-2-lesson-6-quiz) - [Learn Hibernate and JPA - Module 4 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-1-basics-of-transactions/quizzes/learn-hibernate-and-jpa-module-4-lesson-1-quiz) - [Learn Java Collections - Module 4 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-introduction-to-hashset/quizzes/learn-java-collections-module-4-lesson-1-quiz) - [Learn Java Collections - Module 3 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-iterators-fine-grained-control-over-traversal/quizzes/learn-java-collections-module-3-lesson-2-quiz) - [Learn JSON With Jackson - Module 2 Lesson 5 - Quiz](https://www.baeldung.com/members/courses/learn-json-with-jackson/lessons/lesson-5-handling-enums/quizzes/learn-json-with-jackson-module-2-lesson-5-quiz) - [Learn Mockito - Module 2 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-4-advanced-cases/quizzes/learn-mockito-module-2-lesson-4-quiz) - [Learn Java Collections - Module 2 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-4-introduction-to-linkedlists/quizzes/learn-java-collections-module-2-lesson-4-quiz) - [Learn Hibernate and JPA - Module 4 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-3-lazy-vs-eager-fetching/quizzes/learn-hibernate-and-jpa-module-4-lesson-3-quiz) - [Learn Java Collections - Module 2 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-3-bulk-operations-on-lists/quizzes/learn-java-collections-module-2-lesson-3-quiz) - [Learn Hibernate and JPA - Module 3 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-1-basic-crud-operations/quizzes/learn-hibernate-and-jpa-module-3-lesson-1-quiz-2) - [Learn Hibernate and JPA - Module 2 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-1-entity-mappings-2/quizzes/learn-hibernate-and-jpa-module-2-lesson-1-quiz) - [Learn Hibernate and JPA - Module 2 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-2-mapping-relationships/quizzes/learn-hibernate-and-jpa-module-2-lesson-2-quiz) - [Learn Hibernate and JPA - Module 2 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-3-mapping-enum-and-date-types/quizzes/learn-hibernate-and-jpa-module-2-lesson-3-quiz) - [Learn Hibernate and JPA - Module 2 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-4-advanced-id-mapping/quizzes/learn-hibernate-and-jpa-module-2-lesson-4-quiz) - [Learn Hibernate and JPA - Module 2 Lesson 5 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-5-inheritance-mapping-introduction/quizzes/learn-hibernate-and-jpa-module-2-lesson-5-quiz) - [Lesson 5 - Parallel Execution - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-5-parallel-execution/quizzes/lesson-5-parallel-execution-quiz) - [Lesson 2 - Tagging and Filtering - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-2-tagging-and-filtering/quizzes/lesson-2-tagging-and-filtering-quiz) - [Lesson 4: Grouping Assertions - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-4-grouping-assertions/quizzes/lesson-4-grouping-assertions-quiz) - [Learn Mockito - Module 2 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-3-exception-handling-in-unit-tests/quizzes/learn-mockito-module-2-lesson-3-quiz) - [Learn Mockito - Module 2 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-2-advanced-stubbing-techniques/quizzes/learn-mockito-module-2-lesson-2-quiz) - [Learn Mockito - Module 2 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-1-working-with-spies-and-partial-mocks/quizzes/learn-mockito-module-2-lesson-1-quiz) - [Learn Mockito - Module 1 Lesson 6 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-6-verifying-interactions-with-mocks/quizzes/learn-mockito-module-1-lesson-6-quiz) - [Learn Mockito - Module 1 Lesson 5 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-5-stubbing-methods-for-controlled-behavior/quizzes/learn-mockito-module-1-lesson-5-quiz) - [Learn Mockito - Module 1 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-3-the-basics-of-creating-and-managing-mock-objects/quizzes/learn-mockito-module-1-lesson-3-quiz) - [Learn Mockito - Module 1 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-2-the-project-were-testing-2/quizzes/learn-mockito-module-1-lesson-2-quiz) - [Learn Mockito - Module 1 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-1-introduction-to-unit-testing-and-mocking-concepts/quizzes/learn-mockito-module-1-lesson-1-quiz) - [Learn Hibernate and JPA - Module 3 Lesson 1 - Quiz](https://www.baeldung.com/members/quizzes/learn-hibernate-and-jpa-module-3-lesson-1-quiz) - [Learn Spring Data JPA - Quiz - Module 6 Lesson 5](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-5-entity-graphs/quizzes/learn-spring-data-jpa-quiz-module-6-lesson-5) - [Learn Spring Data JPA - Quiz - Module 6 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-4-auditing/quizzes/learn-spring-data-jpa-quiz-module-6-lesson-4) - [Learn Spring Data JPA - Quiz - Module 6 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-domain-events/quizzes/learn-spring-data-jpa-quiz-module-6-lesson-3) - [Learn Spring Data JPA - Quiz - Module 6 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-spring-data-and-transactions/quizzes/learn-spring-data-jpa-quiz-module-6-lesson-2) - [Learn Spring Data JPA - Quiz - Module 6 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-custom-methods-in-repositories/quizzes/learn-spring-data-jpa-quiz-module-6-lesson-1) - [Learn Spring Data JPA - Quiz - Module 5 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-query-dsl/quizzes/learn-spring-data-jpa-quiz-module-5-lesson-3) - [Learn Spring Data JPA - Quiz - Module 5 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-using-query-by-example/quizzes/learn-spring-data-jpa-quiz-module-5-lesson-2) - [Learn Spring Data JPA - Quiz - Module 5 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-building-queries-with-specifications/quizzes/learn-spring-data-jpa-quiz-module-5-lesson-1) - [Learn Spring Data JPA - Quiz - Module 4 Lesson 5](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-5-using-pagination-in-controllers-part-2/quizzes/learn-spring-data-jpa-quiz-module-4-lesson-5) - [Learn Spring Data JPA - Quiz - Module 4 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-4-pagination/quizzes/learn-spring-data-jpa-quiz-module-4-lesson-4) - [Learn Spring Data JPA - Quiz - Module 4 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-sorting-with-query/quizzes/learn-spring-data-jpa-quiz-module-4-lesson-3) - [Learn Spring Data JPA - Quiz - Module 4 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-sorting/quizzes/learn-spring-data-jpa-quiz-module-4-lesson-2) - [Learn Spring Data JPA - Quiz - Module 4 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-pagination-and-sorting-support/quizzes/learn-spring-data-jpa-quiz-module-4-lesson-1) - [Learn Spring Data JPA - Quiz - Module 3 Lesson 5](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-5-returning-a-custom-object-from-a-query/quizzes/learn-spring-data-jpa-quiz-module-3-lesson-5) - [Learn Spring Data JPA - Quiz - Module 3 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-4-named-queries/quizzes/learn-spring-data-jpa-quiz-module-3-lesson-4) - [Learn Spring Data JPA - Quiz - Module 3 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-modifying-queries/quizzes/learn-spring-data-jpa-quiz-module-3-lesson-3) - [Learn Spring Data JPA - Quiz - Module 3 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-using-query-with-parameters/quizzes/learn-spring-data-jpa-quiz-module-3-lesson-2) - [Learn Spring Data JPA - Quiz - Module 3 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-using-query/quizzes/learn-spring-data-jpa-quiz-module-3-lesson-1) - [Learn Spring Data JPA - Quiz - Module 2 Lesson 7](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-7-testing-spring-data-repositories/quizzes/learn-spring-data-jpa-quiz-module-2-lesson-7) - [Learn Spring Data JPA - Quiz - Module 2 Lesson 6](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-6-spring-data-jpa-delete-methods/quizzes/learn-spring-data-jpa-quiz-module-2-lesson-6) - [Learn Spring Data JPA - Quiz - Module 2 Lesson 5](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-5-spring-data-jpa-save-methods/quizzes/learn-spring-data-jpa-quiz-module-2-lesson-5) - [Learn Spring Data JPA - Quiz - Module 2 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-4-deep-dive-into-derived-query-methods/quizzes/learn-spring-data-jpa-quiz-module-2-lesson-4) - [Learn Spring Data JPA - Quiz - Module 2 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-derived-query-methods/quizzes/learn-spring-data-jpa-quiz-module-2-lesson-3) - [Learn Spring Data JPA - Quiz - Module 2 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-2-introduction-to-spring-data-jpa-repositories/quizzes/learn-spring-data-jpa-quiz-module-2-lesson-2) - [Learn Spring Data JPA - Quiz - Module 2 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-spring-data-jpa-setup/quizzes/learn-spring-data-jpa-quiz-module-2-lesson-1-3) - [Learn Spring Data JPA - Quiz - Module 1 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-3-the-persistence-project-were-building-part-2-2/quizzes/learn-spring-data-jpa-quiz-module-1-lesson-3-2) - [Learn Spring Data JPA - Quiz - Module 1 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-data-jpa/lessons/lesson-1-the-java-persistence-ecosystem-2/quizzes/learn-spring-data-jpa-quiz-module-1-lesson-1) - [Learn JUnit - Module 5 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-4-conditional-test-execution/quizzes/learn-junit-module-5-lesson-4-quiz) - [Learn JUnit - Module 5 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-3-test-suites/quizzes/learn-junit-module-5-lesson-3-quiz) - [Learn JUnit - Module 5 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-1-execution-order/quizzes/learn-junit-module-5-lesson-1-quiz) - [Learn JUnit - Module 4 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-3-dynamic-tests/quizzes/learn-junit-module-4-lesson-3-quiz) - [Learn JUnit - Module 4 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-2-parameterized-tests/quizzes/learn-junit-module-4-lesson-2-quiz) - [Learn JUnit - Module 4 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-1-repeating-tests/quizzes/learn-junit-module-4-lesson-1-quiz) - [Lesson 3: Advanced Assertions - AssertJ - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-3-advanced-assertions-assertj/quizzes/lesson-3-advanced-assertions-assertj-quiz) - [Lesson 2: Advanced Assertions - Hamcrest - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-2-advanced-assertions-hamcrest/quizzes/lesson-2-advanced-assertions-hamcrest-quiz) - [Lesson 1: Expecting Exceptions - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-1-expecting-exceptions/quizzes/lesson-1-expecting-exceptions-quiz) - [Lesson 5: Disabling Tests - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-5-disabling-tests/quizzes/lesson-5-disabling-tests-quiz) - [Lesson 4: Test Naming and Display Name - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-4-test-naming-and-display-name/quizzes/lesson-4-test-naming-and-display-name-quiz) - [Lesson 3: JUnit Assertions - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-3-junit-assertions/quizzes/lesson-3-junit-assertions-quiz) - [Lesson 2 - Mocking - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-2-mocking/quizzes/lesson-2-mocking-quiz) - [Lesson 1 - Lifecycle Methods - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-1-lifecycle-methods/quizzes/lesson-1-lifecycle-methods-quiz) - [Lesson 5 - Tests and Project Configuration - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-5-tests-and-project-configuration/quizzes/lesson-5-tests-and-project-configuration-quiz) - [Lesson 4 - Testing Our Functionality - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-4-testing-our-functionality/quizzes/lesson-4-testing-our-functionality-quiz) - [Lesson 3 - Writing Tests - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-3-writing-tests/quizzes/lesson-3-writing-tests-quiz) - [Lesson 2 - The Project We're Testing - Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-2-the-project-were-testing/quizzes/lesson-2-the-project-were-testing-quiz) - [Lesson 1 – JUnit Ecosystem – Quiz](https://www.baeldung.com/members/courses/learn-junit/lessons/lesson-1-junit-ecosystem/quizzes/lesson-1-junit-ecosystem-quiz-2) - [Learn Maven - Module 4 Lesson 5 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-5-quick-peek-at-additional-maven-features/quizzes/learn-maven-module-4-lesson-5-quiz) - [Learn Maven - Module 4 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-4-repositories-2/quizzes/learn-maven-module-4-lesson-4-quiz) - [Learn Maven - Module 4 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-3-build-plugins/quizzes/learn-maven-module-4-lesson-3-quiz) - [Learn Maven - Module 4 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-2-the-element-and-bom/quizzes/learn-maven-module-4-lesson-2-quiz) - [Learn Maven - Module 4 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-1-the-parent-pom/quizzes/learn-maven-module-4-lesson-1-quiz) - [Learn Maven - Module 3 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-4-maven-profiles/quizzes/learn-maven-module-3-lesson-4-quiz) - [Learn Maven - Module 3 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-3-maven-dependencies/quizzes/learn-maven-module-3-lesson-3-quiz) - [Learn Maven - Module 3 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-2-tests-and-the-maven-build/quizzes/learn-maven-module-3-lesson-2-quiz) - [Learn Maven - Module 3 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-1-analyzing-the-build-lifecycle/quizzes/learn-maven-module-3-lesson-1-quiz) - [Learn Maven - Module 2 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-2-building-our-application-with-maven/quizzes/learn-maven-module-2-lesson-2-quiz) - [Learn Maven - Module 2 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-1-the-pom-file/quizzes/learn-maven-module-2-lesson-1-quiz) - [Learn Maven - Module 1 Lesson 3 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-3-setting-up-maven/quizzes/learn-maven-module-1-lesson-3-quiz) - [Learn Maven - Module 1 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-2-the-java-project-well-build/quizzes/learn-maven-module-1-lesson-2-quiz) - [Learn Maven - Module 1 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-maven/lessons/lesson-1-introduction-to-apache-maven/quizzes/learn-maven-module-1-lesson-1-quiz) - [Learn Spring Security OAuth - Quiz - Module 6 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-exploring-topologies-gateway-api-as-oauth2-client-part-2/quizzes/learn-spring-security-oauth-quiz-module-6-lesson-3) - [Learn Spring Security OAuth - Quiz - Module 6 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-sharing-principal-information-in-microservices/quizzes/learn-spring-security-oauth-quiz-module-6-lesson-2) - [Learn Spring Security OAuth - Quiz - Module 6 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-oauth-security-patterns-in-a-microservice-application/quizzes/learn-spring-security-oauth-quiz-module-6-lesson-1) - [Learn Spring Security OAuth - Quiz - Module 5 Lesson 8](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-8-token-revocation-text-only/quizzes/learn-spring-security-oauth-quiz-module-5-lesson-8) - [Learn Spring Security OAuth - Quiz - Module 5 Lesson 7](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-7-the-client-credentials-flow-text-only/quizzes/learn-spring-security-oauth-quiz-module-5-lesson-7) - [Learn Spring Security OAuth - Quiz - Module 5 Lesson 6](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-6-logout-with-oauth-and-oidc-text-only/quizzes/learn-spring-security-oauth-quiz-module-5-lesson-6) - [Learn Spring Security OAuth - Quiz - Module 5 Lesson 5](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-5-oauth2-and-openid-connect-text-only/quizzes/learn-spring-security-oauth-quiz-module-5-lesson-5) - [Learn Spring Security OAuth - Quiz - Module 5 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-4-testing-oauth2-with-rest-assured-text-only/quizzes/learn-spring-security-oauth-quiz-module-5-lesson-4) - [Learn Spring Security OAuth - Quiz - Module 5 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-exploring-jws-with-oauth2-text-only/quizzes/learn-spring-security-oauth-quiz-module-5-lesson-3) - [Learn Spring Security OAuth - Quiz - Module 5 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-oauth2-and-spas-implementation-text-only/quizzes/learn-spring-security-oauth-quiz-module-5-lesson-2) - [Learn Spring Security OAuth - Quiz - Module 5 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-oauth2-and-spas-theory-text-only/quizzes/learn-spring-security-oauth-quiz-module-5-lesson-1) - [Learn Spring Security OAuth - Quiz - Module 4 Lesson 5](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-5-the-authorization-code-flow-with-pkce-text-only/quizzes/learn-spring-security-oauth-quiz-module-4-lesson-5) - [Learn Spring Security OAuth - Quiz - Module 4 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-4-testing-oauth2-clients-text-only/quizzes/learn-spring-security-oauth-quiz-module-4-lesson-4) - [Learn Spring Security OAuth - Quiz - Module 4 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-refreshing-a-token-text-only/quizzes/learn-spring-security-oauth-quiz-module-4-lesson-3) - [Learn Spring Security OAuth - Quiz - Module 4 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-new-oauth2-social-login-text-only/quizzes/learn-spring-security-oauth-quiz-module-4-lesson-2) - [Learn Spring Security OAuth - Quiz - Module 4 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-the-client-configuration-under-the-hood-text-only/quizzes/learn-spring-security-oauth-quiz-module-4-lesson-1) - [Learn Spring Security OAuth - Quiz - Module 3 Lesson 8](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-8-resource-server-testing-support-text-only/quizzes/learn-spring-security-oauth-quiz-module-3-lesson-8) - [Learn Spring Security OAuth - Quiz - Module 3 Lesson 7](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-7-resource-server-multi-tenancy-support-text-only/quizzes/learn-spring-security-oauth-quiz-module-3-lesson-7) - [Learn Spring Security OAuth - Quiz - Module 3 Lesson 6](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-6-custom-validators-for-jwt-claims-text-only/quizzes/learn-spring-security-oauth-quiz-module-3-lesson-6) - [Learn Spring Security OAuth - Quiz - Module 3 Lesson 5](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-5-custom-authorities-from-jwt-claims-text-only/quizzes/learn-spring-security-oauth-quiz-module-3-lesson-5) - [Learn Spring Security OAuth - Quiz - Module 3 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-4-accessing-jwt-bearer-token-authentication-attributes-using-spel-text-only/quizzes/learn-spring-security-oauth-quiz-module-3-lesson-4) - [Learn Spring Security OAuth - Quiz - Module 3 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-accessing-jwt-bearer-token-authentication-attributes-text-only/quizzes/learn-spring-security-oauth-quiz-module-3-lesson-3) - [Learn Spring Security OAuth - Quiz - Module 3 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-verify-validate-claims-from-the-jwt-text-only/quizzes/learn-spring-security-oauth-quiz-module-3-lesson-2) - [Learn Spring Security OAuth - Quiz - Module 3 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-basic-authorization-with-oauth2-text-only/quizzes/learn-spring-security-oauth-quiz-module-3-lesson-1) - [Learn Spring Security OAuth - Quiz - Module 2 Lesson 5](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-5-jwt-support-text-only/quizzes/learn-spring-security-oauth-quiz-module-2-lesson-5) - [Learn Spring Security OAuth - Quiz - Module 2 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-4-the-new-resource-server-support-part-2/quizzes/learn-spring-security-oauth-quiz-module-2-lesson-4) - [Learn Spring Security OAuth - Quiz - Module 2 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-3-the-new-oauth2-client-support-part-2/quizzes/learn-spring-security-oauth-quiz-module-2-lesson-3) - [Learn Spring Security OAuth - Quiz - Module 2 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-the-authorization-server-with-keycloak/quizzes/learn-spring-security-oauth-quiz-module-2-lesson-2) - [Learn Spring Security OAuth - Quiz - Module 2 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-the-authorization-code-flow-theory/quizzes/learn-spring-security-oauth-quiz-module-2-lesson-1) - [Learn Spring Security OAuth - Quiz - Module 1 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-2-picking-the-right-oauth-grant-type-flow-to-use-theory/quizzes/learn-spring-security-oauth-quiz-module-1-lesson-2) - [Learn Spring Security OAuth - Quiz - Module 1 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-oauth-course/lessons/lesson-1-intro-to-oauth2-and-the-oauth2-roles-theory-text-only/quizzes/learn-spring-security-oauth-quiz-module-1-lesson-1) - [Rest With Spring Boot - Quiz - Module 6 Lesson 5](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-5-decouple-the-api-from-the-domain-model/quizzes/rest-with-spring-boot-quiz-module-6-lesson-5) - [Rest With Spring Boot - Quiz - Module 6 Lesson 4](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-4-dealing-with-changes-in-the-api-versioning/quizzes/rest-with-spring-boot-quiz-module-6-lesson-4) - [Rest With Spring Boot - Quiz - Module 6 Lesson 3](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-dealing-with-changes-in-the-api-url-changes/quizzes/rest-with-spring-boot-quiz-module-6-lesson-3) - [Rest With Spring Boot - Quiz - Module 6 Lesson 2](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-dealing-with-changes-in-the-api-resource-changes/quizzes/rest-with-spring-boot-quiz-module-6-lesson-2) - [Rest With Spring Boot - Quiz - Module 6 Lesson 1](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-evolution-of-a-rest-api/quizzes/rest-with-spring-boot-quiz-module-6-lesson-1) - [Rest With Spring Boot - Quiz - Module 5 Lesson 3](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-discover-a-rest-api-hateoas/quizzes/rest-with-spring-boot-quiz-module-5-lesson-3) - [Rest With Spring Boot - Quiz - Module 5 Lesson 2](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-document-the-api-with-swagger-and-openapi/quizzes/rest-with-spring-boot-quiz-module-5-lesson-2) - [Rest With Spring Boot - Quiz - Module 5 Lesson 1](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-document-vs-discover-a-rest-api/quizzes/rest-with-spring-boot-quiz-module-5-lesson-1) - [Rest With Spring Boot - Quiz - Module 4 Lesson 6](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-6-mechanisms-to-simplify-contract-test-cases/quizzes/rest-with-spring-boot-quiz-module-4-lesson-6) - [Rest With Spring Boot - Quiz - Module 4 Lesson 5](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-5-contract-testing-a-special-kind-of-test/quizzes/rest-with-spring-boot-quiz-module-4-lesson-5) - [Rest With Spring Boot - Quiz - Module 4 Lesson 4](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-4-mechanisms-to-simplify-end-to-end-test-cases/quizzes/rest-with-spring-boot-quiz-module-4-lesson-4) - [Rest With Spring Boot - Quiz - Module 4 Lesson 3](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-how-to-test-http-semantics/quizzes/rest-with-spring-boot-quiz-module-4-lesson-3) - [Rest With Spring Boot - Quiz - Module 4 Lesson 2](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-webtestclient-api-assertions/quizzes/rest-with-spring-boot-quiz-module-4-lesson-2) - [Rest With Spring Boot - Quiz - Module 4 Lesson 1](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-end-to-end-api-tests-webtestclient/quizzes/rest-with-spring-boot-quiz-module-4-lesson-1) - [Rest With Spring Boot - Quiz - Module 3 Lesson 5](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-5-spring-and-the-problem-details-spec/quizzes/rest-with-spring-boot-quiz-module-3-lesson-5) - [Rest With Spring Boot - Quiz - Module 3 Lesson 4](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-4-validation-groups-for-different-api-operations/quizzes/rest-with-spring-boot-quiz-module-3-lesson-4) - [Rest With Spring Boot - Quiz - Module 3 Lesson 3](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-the-basics-of-input-validation/quizzes/rest-with-spring-boot-quiz-module-3-lesson-3) - [Rest With Spring Boot - Quiz - Module 3 Lesson 2](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-global-api-exception-handling/quizzes/rest-with-spring-boot-quiz-module-3-lesson-2) - [Rest With Spring Boot - Quiz - Module 3 Lesson 1](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-exception-handling-and-sane-http-status-codes/quizzes/rest-with-spring-boot-quiz-module-3-lesson-1) - [Rest With Spring Boot - Quiz - Module 2 Lesson 4](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-4-the-lifecycle-of-a-request/quizzes/rest-with-spring-boot-quiz-module-2-lesson-4) - [Rest With Spring Boot - Quiz - Module 2 Lesson 3](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-good-uri-practices-theory/quizzes/rest-with-spring-boot-quiz-module-2-lesson-3) - [Rest With Spring Boot - Quiz - Module 2 Lesson 2](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-leverage-http-verbs-and-semantics-in-rest-api-operations/quizzes/rest-with-spring-boot-quiz-module-2-lesson-2) - [Rest With Spring Boot - Quiz - Module 2 Lesson 1](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-http-verbs-and-semantics-with-spring/quizzes/rest-with-spring-boot-quiz-module-2-lesson-1) - [Rest With Spring Boot - Quiz - Module 1 Lesson 3](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-3-the-web-configuration/quizzes/rest-with-spring-boot-quiz-module-1-lesson-3-2) - [Rest With Spring Boot - Quiz - Module 1 Lesson 2](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-2-the-project-were-building/quizzes/rest-with-spring-boot-quiz-module-1-lesson-2-2) - [Rest With Spring Boot - Quiz - Module 1 Lesson 1](https://www.baeldung.com/members/courses/rest-with-spring-boot/lessons/lesson-1-the-anatomy-of-a-rest-api-theory/quizzes/rest-with-spring-boot-quiz-module-1-lesson-1-2) - [Learn Spring - Quiz - Module 9 Lesson 6](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-introduction-to-spring-security-text-only/quizzes/learn-spring-quiz-module-9-lesson-6) - [Learn Spring - Quiz - Module 9 Lesson 5](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-the-new-reactive-paradigm-in-spring/quizzes/learn-spring-quiz-module-9-lesson-5) - [Learn Spring - Quiz - Module 9 Lesson 4](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-working-with-events-and-listeners/quizzes/learn-spring-quiz-module-9-lesson-4) - [Learn Spring - Quiz - Module 9 Lesson 3](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-the-spring-expression-language-spel/quizzes/learn-spring-quiz-module-9-lesson-3) - [Learn Spring - Quiz - Module 9 Lesson 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-spring-aop-in-practice-text-only/quizzes/learn-spring-quiz-module-9-lesson-2) - [Learn Spring - Quiz - Module 9 Lesson 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-an-intro-to-aop-in-spring/quizzes/learn-spring-quiz-module-9-lesson-1) - [Learn Spring - Quiz - Module 8 Lesson 6](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-intro-to-the-resttemplate/quizzes/learn-spring-quiz-module-8-lesson-6) - [Learn Spring - Quiz - Module 8 Lesson 5](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-exception-handling-in-the-api-part-2/quizzes/learn-spring-quiz-module-8-lesson-5) - [Learn Spring - Quiz - Module 8 Lesson 4](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-controllers-and-urls-the-requestparam-annotation-text-only/quizzes/learn-spring-quiz-module-8-lesson-4) - [Learn Spring - Quiz - Module 8 Lesson 3](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-controllers-and-urls-the-pathvariable-annotation-text-only/quizzes/learn-spring-quiz-module-8-lesson-3) - [Learn Spring - Quiz - Module 8 Lesson 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-controllers-and-request-response-text-only/quizzes/learn-spring-quiz-module-8-lesson-2) - [Learn Spring - Quiz - Module 8 Lesson 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-controller-basics-part-2/quizzes/learn-spring-quiz-module-8-lesson-1) - [Learn Spring - Quiz - Module 7 Lesson 5](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-spring-mvc-with-the-mustache-template-engine-text-only/quizzes/learn-spring-quiz-module-7-lesson-5) - [Learn Spring - Quiz - Module 7 Lesson 4](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-spring-mvc-with-the-freemarker-template-engine/quizzes/learn-spring-quiz-module-7-lesson-4) - [Learn Spring - Quiz - Module 7 Lesson 3](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-the-basics-of-form-validation/quizzes/learn-spring-quiz-module-7-lesson-3) - [Learn Spring - Quiz - Module 7 Lesson 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-a-full-create-operation-with-thymeleaf/quizzes/learn-spring-quiz-module-7-lesson-2) - [Learn Spring - Quiz - Module 7 Lesson 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-views-view-resolvers-and-templating-engines-part-2/quizzes/learn-spring-quiz-module-7-lesson-1-2) - [Learn Spring - Quiz - Module 6 Lesson 5](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-testing-with-boot-2/quizzes/learn-spring-quiz-module-6-lesson-5) - [Learn Spring - Quiz - Module 6 Lesson 4](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-decouple-the-controller-from-entities-2/quizzes/learn-spring-quiz-module-6-lesson-4) - [Learn Spring - Quiz - Module 6 Lesson 3](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-an-mvc-style-application-vs-a-rest-api-2/quizzes/learn-spring-quiz-module-6-lesson-3) - [Learn Spring - Quiz - Module 6 Lesson 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-expanding-our-first-controller-2/quizzes/learn-spring-quiz-module-6-lesson-2) - [Learn Spring - Quiz - Module 6 Lesson 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-what-is-mvc-and-spring-mvc-2/quizzes/learn-spring-quiz-module-6-lesson-1) - [Learn Spring - Quiz - Module 5 Lesson 5](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-transactions-in-spring-text-only/quizzes/learn-spring-quiz-module-5-lesson-5) - [Learn Spring - Quiz - Module 5 Lesson 4](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-spring-with-jpa-and-hibernate/quizzes/learn-spring-quiz-module-5-lesson-4) - [Learn Spring - Quiz - Module 5 Lesson 3](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-pagination-and-sorting/quizzes/learn-spring-quiz-module-5-lesson-3) - [Learn Spring - Quiz - Module 5 Lesson 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-beyond-the-default-repository/quizzes/learn-spring-quiz-module-5-lesson-2) - [Learn Spring - Quiz - Module 5 Lesson 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-project-persistence-with-spring-data-jpa/quizzes/learn-spring-quiz-module-5-lesson-1) - [Learn Spring - Quiz - Module 3 Lesson 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-working-with-profiles-in-spring-2/quizzes/learn-spring-quiz-module-3-lesson-2) - [Learn Spring - Quiz - Module 3 Lesson 3](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-logging-in-a-spring-boot-project-the-right-way/quizzes/learn-spring-quiz-module-3-lesson-3) - [Learn Spring - Quiz - Module 3 Lesson 8](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-8-deploying-the-boot-application-other-options-text-only/quizzes/learn-spring-quiz-module-3-lesson-8) - [Learn Spring - Quiz - Module 4 Lesson 3](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-actuators-in-boot-custom-health-indicator-text-only/quizzes/learn-spring-quiz-module-4-lesson-3) - [Learn Spring - Quiz - Module 4 Lesson 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-actuators-in-boot/quizzes/learn-spring-quiz-module-4-lesson-2) - [Learn Spring - Quiz - Module 4 Lesson 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-spring-boot-auto-configuration/quizzes/learn-spring-quiz-module-4-lesson-1) - [Learn Spring - Quiz - Module 3 Lesson 7](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-7-spring-boot-default-properties-text-only/quizzes/learn-spring-quiz-module-3-lesson-7-2) - [Learn Spring - Quiz - Module 3 Lesson 6](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-working-with-propertysource-text-only/quizzes/learn-spring-quiz-module-3-lesson-6) - [Learn Spring - Quiz - Module 3 Lesson 5](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-the-spring-testing-framework-part-2/quizzes/learn-spring-quiz-module-3-lesson-5) - [Learn Spring - Quiz - Module 3 Lesson 4](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-deploying-the-boot-application-via-the-ide/quizzes/learn-spring-quiz-module-3-lesson-4) - [Learn Spring - Quiz - Module 3 Lesson 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-working-with-properties/quizzes/learn-spring-quiz-module-3-lesson-1) - [Learn Spring - Quiz - Module 2 Lesson 10](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-10-debugging-and-solving-wiring-exceptions-text-only/quizzes/learn-spring-quiz-module-2-lesson-10) - [Learn Spring - Quiz - Module 2 Lesson 6](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-exploring-the-scopes-of-spring-beans-text-only/quizzes/learn-spring-quiz-module-2-lesson-6) - [Learn Spring - Quiz - Module 2 Lesson 5](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-5-simple-wiring-and-injection-part-2/quizzes/learn-spring-quiz-module-2-lesson-5) - [Learn Spring - Quiz - Module 2 Lesson 4](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-lifecycle-of-a-bean-init-and-destroy-hooks/quizzes/learn-spring-quiz-module-2-lesson-4) - [Learn Spring - Quiz - Module 2 Lesson 3](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-defining-beans-component-scanning-and-bean-annotations/quizzes/learn-spring-quiz-module-2-lesson-3) - [Learn Spring - Quiz - Module 2 Lesson 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-the-basics-of-java-configuration-and-the-spring-context/quizzes/learn-spring-quiz-module-2-lesson-2) - [Learn Spring - Quiz - Module 2 Lesson 1](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-1-what-is-di-and-how-does-it-work-in-spring/quizzes/learn-spring-quiz-module-2-lesson-1) - [Learn Spring - Quiz - Module 1 Lesson 6](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-6-maven-and-spring/quizzes/learn-spring-quiz-module-1-lesson-6) - [Learn Spring - Quiz - Module 1 Lesson 4](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-4-a-simple-development-environment/quizzes/learn-spring-quiz-module-1-lesson-4) - [Learn Spring - Quiz - Module 1 Lesson 3](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-3-introducing-spring-boot/quizzes/learn-spring-quiz-module-1-lesson-3) - [Learn Spring - Quiz - Module 1 Lesson 2](https://www.baeldung.com/members/courses/learn-spring/lessons/lesson-2-understanding-the-full-spring-ecosystem/quizzes/learn-spring-quiz-module-1-lesson-2) - [Learn Spring Security Core - Quiz - Module 14 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-reactive-method-security/quizzes/learn-spring-security-core-quiz-module-14-lesson-2) - [Learn Spring Security Core - Quiz - Module 14 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-a-basic-reactive-security-example/quizzes/learn-spring-security-core-quiz-module-14-lesson-1) - [Learn Spring Security Core - Quiz - Module 13 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-spring-security-with-ldap/quizzes/learn-spring-security-core-quiz-module-13-lesson-4) - [Learn Spring Security Core - Quiz - Module 13 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-session-management-with-spring-session/quizzes/learn-spring-security-core-quiz-module-13-lesson-3) - [Learn Spring Security Core - Quiz - Module 13 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-multi-tenancy-with-spring-security/quizzes/learn-spring-security-core-quiz-module-13-lesson-2) - [Learn Spring Security Core - Quiz - Module 13 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-spring-security-for-a-non-spring-application/quizzes/learn-spring-security-core-quiz-module-13-lesson-1) - [Learn Spring Security Core - Quiz - Module 12 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-a-two-factor-implementation-with-sms/quizzes/learn-spring-security-core-quiz-module-12-lesson-2) - [Learn Spring Security Core - Quiz - Module 12 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-a-simple-two-factor-implementation-with-a-soft-token/quizzes/learn-spring-security-core-quiz-module-12-lesson-1) - [Learn Spring Security Core - Quiz - Module 11 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-acl-with-spring-security-part-2/quizzes/learn-spring-security-core-quiz-module-11-lesson-3) - [Learn Spring Security Core - Quiz - Module 11 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-the-data-structure-of-acl/quizzes/learn-spring-security-core-quiz-module-11-lesson-2) - [Learn Spring Security Core - Quiz - Module 11 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-introduction-to-acl-and-domain-object-security/quizzes/learn-spring-security-core-quiz-module-11-lesson-1) - [Learn Spring Security Core - Quiz - Module 10 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-certificates-and-https-for-tomcat/quizzes/learn-spring-security-core-quiz-module-10-lesson-3) - [Learn Spring Security Core - Quiz - Module 10 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-basic-authentication-for-the-api/quizzes/learn-spring-security-core-quiz-module-10-lesson-2) - [Learn Spring Security Core - Quiz - Module 10 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-the-basics-of-api-security/quizzes/learn-spring-security-core-quiz-module-10-lesson-1) - [Learn Spring Security Core - Quiz - Module 9 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-defining-custom-access-control-logic-text-only/quizzes/learn-spring-security-core-quiz-module-9-lesson-4) - [Learn Spring Security Core - Quiz - Module 9 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-secure-method-invocations-with-aop-text-only/quizzes/learn-spring-security-core-quiz-module-9-lesson-3) - [Learn Spring Security Core - Quiz - Module 9 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-the-topology-of-roles-and-privileges-part-2/quizzes/learn-spring-security-core-quiz-module-9-lesson-2) - [Learn Spring Security Core - Quiz - Module 9 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-how-authorization-works/quizzes/learn-spring-security-core-quiz-module-9-lesson-1) - [Learn Spring Security Core - Quiz - Module 8 Lesson 5](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-5-setting-up-users-at-startup-text-only/quizzes/learn-spring-security-core-quiz-module-8-lesson-5) - [Learn Spring Security Core - Quiz - Module 8 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-tracking-logged-in-users/quizzes/learn-spring-security-core-quiz-module-8-lesson-4) - [Learn Spring Security Core - Quiz - Module 8 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-in-memory-jdbc-and-hibernate-jpa-user-storage/quizzes/learn-spring-security-core-quiz-module-8-lesson-3) - [Learn Spring Security Core - Quiz - Module 8 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-multiple-providers-and-the-authentication-manager/quizzes/learn-spring-security-core-quiz-module-8-lesson-2) - [Learn Spring Security Core - Quiz - Module 8 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-a-custom-authentication-provider/quizzes/learn-spring-security-core-quiz-module-8-lesson-1) - [Learn Spring Security Core - Quiz - Module 7 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-configure-the-filter-chain/quizzes/learn-spring-security-core-quiz-module-7-lesson-4) - [Learn Spring Security Core - Quiz - Module 7 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-the-security-context/quizzes/learn-spring-security-core-quiz-module-7-lesson-3) - [Learn Spring Security Core - Quiz - Module 7 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-run-as-a-different-user/quizzes/learn-spring-security-core-quiz-module-7-lesson-2) - [Learn Spring Security Core - Quiz - Module 7 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-breaking-down-the-authentication-flow/quizzes/learn-spring-security-core-quiz-module-7-lesson-1) - [Learn Spring Security Core - Quiz - Module 6 Lesson 5](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-5-the-bcrypt-solution/quizzes/learn-spring-security-core-quiz-module-6-lesson-5) - [Learn Spring Security Core - Quiz - Module 6 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-key-stretching/quizzes/learn-spring-security-core-quiz-module-6-lesson-4) - [Learn Spring Security Core - Quiz - Module 6 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-why-hashing-isnt-enough-using-salts/quizzes/learn-spring-security-core-quiz-module-6-lesson-3) - [Learn Spring Security Core - Quiz - Module 6 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-hashing-passwords-md5-and-sha-256/quizzes/learn-spring-security-core-quiz-module-6-lesson-2) - [Learn Spring Security Core - Quiz - Module 6 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-introduction-to-storing-passwords/quizzes/learn-spring-security-core-quiz-module-6-lesson-1) - [Learn Spring Security Core - Quiz - Module 5 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-programmatic-expressions-and-a-custom-permissionevaluator-text-only/quizzes/learn-spring-security-core-quiz-module-5-lesson-4) - [Learn Spring Security Core - Quiz - Module 5 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-on-method-authorization-with-expressions-text-only/quizzes/learn-spring-security-core-quiz-module-5-lesson-2) - [Learn Spring Security Core - Quiz - Module 5 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-by-url-authorization-with-expressions/quizzes/learn-spring-security-core-quiz-module-5-lesson-1) - [Learn Spring Security Core - Quiz - Module 4 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-the-authorize-tag/quizzes/learn-spring-security-core-quiz-module-4-lesson-4) - [Learn Spring Security Core - Quiz - Module 4 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-spring-security-with-thymeleaf/quizzes/learn-spring-security-core-quiz-module-4-lesson-3) - [Learn Spring Security Core - Quiz - Module 4 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-the-authentication-tag-and-displaying-the-current-user/quizzes/learn-spring-security-core-quiz-module-4-lesson-2) - [Learn Spring Security Core - Quiz - Module 4 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-spring-security-with-jsp/quizzes/learn-spring-security-core-quiz-module-4-lesson-1) - [Learn Spring Security Core - Quiz - Module 3 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-remember-me-with-persistence/quizzes/learn-spring-security-core-quiz-module-3-lesson-3) - [Learn Spring Security Core - Quiz - Module 3 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-remember-me-with-cookie/quizzes/learn-spring-security-core-quiz-module-3-lesson-2) - [Learn Spring Security Core - Quiz - Module 3 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-a-simple-remember-me-flow/quizzes/learn-spring-security-core-quiz-module-3-lesson-1) - [Learn Spring Security Core - Quiz - Module 2 Lesson 6](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-6-ensure-password-strength-during-registration-part-2/quizzes/learn-spring-security-core-quiz-module-2-lesson-6) - [Learn Spring Security Core - Quiz - Module 2 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-deal-with-i-forgot-my-password/quizzes/learn-spring-security-core-quiz-module-2-lesson-4) - [Learn Spring Security Core - Quiz - Module 2 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-activate-a-new-account-via-email/quizzes/learn-spring-security-core-quiz-module-2-lesson-3) - [Learn Spring Security Core - Quiz - Module 2 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-authentication-using-real-users/quizzes/learn-spring-security-core-quiz-module-2-lesson-2) - [Learn Spring Security Core - Quiz - Module 2 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-a-simple-registration-flow/quizzes/learn-spring-security-core-quiz-module-2-lesson-1) - [Learn Spring Security Core - Quiz - Module 1 Lesson 7](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-7-overview-of-spring-security-objects-text-only/quizzes/learn-spring-security-core-quiz-module-1-lesson-7) - [Learn Spring Security Core - Quiz - Module 1 Lesson 6](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-6-anonymous-authentication/quizzes/learn-spring-security-core-quiz-module-1-lesson-6) - [Learn Spring Security Core - Quiz - Module 1 Lesson 5](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-5-implementing-logout/quizzes/learn-spring-security-core-quiz-module-1-lesson-5) - [Learn Spring Security Core - Quiz - Module 1 Lesson 4](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-4-building-a-login-form/quizzes/learn-spring-security-core-quiz-module-1-lesson-4) - [Learn Spring Security Core - Quiz - Module 1 Lesson 3](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-3-url-authorization/quizzes/learn-spring-security-core-quiz-module-1-lesson-3) - [Learn Spring Security Core - Quiz - Module 1 Lesson 2](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-2-a-basic-security-java-config/quizzes/learn-spring-security-core-quiz-module-1-lesson-2) - [Learn Spring Security Core - Quiz - Module 1 Lesson 1](https://www.baeldung.com/members/courses/learn-spring-security-core/lessons/lesson-1-intro-to-spring-security/quizzes/learn-spring-security-core-quiz-module-1-lesson-1) - [Learn Java Streams - Module 2 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-1-creating-streams/quizzes/learn-java-streams-module-2-lesson-1-quiz) - [Learn Java Streams - Module 1 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-java-streams/lessons/lesson-1-functional-programming-and-java-streams/quizzes/learn-java-streams-module-1-lesson-1-quiz) - [Learn Java Collections - Module 3 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-enhanced-for-loops-a-simple-iteration-technique/quizzes/learn-java-collections-module-3-lesson-1-quiz) - [Learn Java Collections - Module 2 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-basic-arraylist-operations/quizzes/learn-java-collections-module-2-lesson-2-quiz) - [Learn Java Collections - Module 2 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-introduction-to-arraylists/quizzes/learn-java-collections-module-2-lesson-1-quiz) - [Learn Java Collections - Module 1 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-2-overview-of-the-java-collections-framework/quizzes/learn-java-collections-module-1-lesson-2-quiz) - [Learn Java Collections - Module 1 Lesson 1 - Quiz](https://www.baeldung.com/members/courses/learn-java-collections/lessons/lesson-1-from-arrays-to-collections/quizzes/learn-java-collections-module-1-lesson-1-quiz) - [Learn Mockito - Module 1 Lesson 4 - Quiz](https://www.baeldung.com/members/courses/learn-mockito/lessons/lesson-4-creating-mock-objects-using-annotations/quizzes/learn-mockito-module-1-lesson-4-quiz) - [Learn Hibernate and JPA - Module 4 Lesson 2 - Quiz](https://www.baeldung.com/members/courses/learn-hibernate-and-jpa/lessons/lesson-2-basic-caching-mechanisms/quizzes/learn-hibernate-and-jpa-module-4-lesson-2-quiz) - [Quiz](https://www.baeldung.com/members/quizzes/quiz) - [Learn Spring Security Core - Quiz - Module 9 Lesson 2 - Part 1](https://www.baeldung.com/members/quizzes/learn-spring-security-core-quiz-module-9-lesson-2-part-1) - [Learn Spring - Quiz - Module 7 Lesson 1](https://www.baeldung.com/members/quizzes/learn-spring-quiz-module-7-lesson-1) - [Learn Spring - Quiz - Module 3 Lesson 7](https://www.baeldung.com/members/quizzes/learn-spring-quiz-module-3-lesson-7) - [Rest With Spring Boot - Quiz - Module 1 Lesson 3](https://www.baeldung.com/members/quizzes/rest-with-spring-boot-quiz-module-1-lesson-3) - [Rest With Spring Boot - Quiz - Module 1 Lesson 2](https://www.baeldung.com/members/quizzes/rest-with-spring-boot-quiz-module-1-lesson-2) - [Rest With Spring Boot - Quiz - Module 1 Lesson 1](https://www.baeldung.com/members/quizzes/rest-with-spring-boot-quiz-module-1-lesson-1) - [Learn Spring Data JPA - Quiz - Module 2 Lesson 1](https://www.baeldung.com/members/quizzes/learn-spring-data-jpa-quiz-module-2-lesson-1) - [Learn Spring Data JPA - Quiz - Module 2 Lesson 1](https://www.baeldung.com/members/quizzes/learn-spring-data-jpa-quiz-module-2-lesson-1-2) - [Learn Spring Data JPA - Quiz - Module 1 Lesson 2](https://www.baeldung.com/members/quizzes/learn-spring-data-jpa-quiz-module-1-lesson-2) - [Learn Spring Data JPA - Quiz - Module 1 Lesson 3](https://www.baeldung.com/members/quizzes/learn-spring-data-jpa-quiz-module-1-lesson-3) ## Certificates - [Learn Mockito](https://www.baeldung.com/members/certificates/learn-mockito) - This award certifies successful completion of the "" Course (6.5 hours) - [Learn JSON with Jackson](https://www.baeldung.com/members/certificates/learn-json-with-jackson) - This award certifies successful completion of the "" Course (8 hours) - [Learn Junit](https://www.baeldung.com/members/certificates/learn-junit) - This award certifies successful completion of the "" Course (11 hours) - [Learn Hibernate](https://www.baeldung.com/members/certificates/learn-hibernate) - This award certifies successful completion of the "" Course (12.5 hours) - [Learn Java Streams](https://www.baeldung.com/members/certificates/learn-java-streams) - This award certifies successful completion of the "" Course (8 hours) - [Learn Java Collections](https://www.baeldung.com/members/certificates/learn-java-collections) - This award certifies successful completion of the "" Course (8 hours) - [Learn Spring Data JPA](https://www.baeldung.com/members/certificates/learn-spring-data-jpa) - This award certifies successful completion of the "" Course (19 hours) - [Rest With Spring Boot](https://www.baeldung.com/members/certificates/rest-with-spring-boot) - This award certifies successful completion of the "" Course (22 hours) - [Learn Spring](https://www.baeldung.com/members/certificates/learn-spring) - This award certifies successful completion of the "" Course (22 hours) - [Learn Spring Security Oauth](https://www.baeldung.com/members/certificates/learn-spring-security-oauth) - This award certifies successful completion of the "" Course (33 hours) - [Learn Spring Security Core](https://www.baeldung.com/members/certificates/learn-spring-security-core) - This award certifies successful completion of the "" Course (26 hours) - [Learn Maven](https://www.baeldung.com/members/certificates/learn-maven) - This award certifies successful completion of the "" Course (8 hours) ## Categories - [Courses](https://www.baeldung.com/members/category/courses) ## Tags - [no-optins](https://www.baeldung.com/members/tag/no-optins) - [no-ads](https://www.baeldung.com/members/tag/no-ads) - [Black Friday](https://www.baeldung.com/members/tag/black-friday) ## Product categories - [Uncategorized](https://www.baeldung.com/members/product-category/uncategorized) - [Baeldung Pro](https://www.baeldung.com/members/product-category/baeldung-pro) - [Course](https://www.baeldung.com/members/product-category/course) - [Team Course](https://www.baeldung.com/members/product-category/team-course) - [All Access](https://www.baeldung.com/members/product-category/all-access) ## Product tags - [cohorts](https://www.baeldung.com/members/product-tag/cohorts) - [team](https://www.baeldung.com/members/product-tag/team) - [upgrade](https://www.baeldung.com/members/product-tag/upgrade) - [Yearly](https://www.baeldung.com/members/product-tag/yearly) - [sale](https://www.baeldung.com/members/product-tag/sale) - [retired](https://www.baeldung.com/members/product-tag/retired) ## Coupon categories - [Baeldung Pro](https://www.baeldung.com/members/sc_coupon_category/baeldung-pro) ## Course Categories - [Pro](https://www.baeldung.com/members/course-category/pro) - [Team](https://www.baeldung.com/members/course-category/team) - [Single Course](https://www.baeldung.com/members/course-category/single-course) ## Lesson Tags - [Pro](https://www.baeldung.com/members/lesson-tag/pro) - [Module 1](https://www.baeldung.com/members/lesson-tag/module-1) - [Module 2](https://www.baeldung.com/members/lesson-tag/module-2) - [Module 3](https://www.baeldung.com/members/lesson-tag/module-3) - [Module 0](https://www.baeldung.com/members/lesson-tag/module-0) - [Module 4](https://www.baeldung.com/members/lesson-tag/module-4) - [Module 5](https://www.baeldung.com/members/lesson-tag/module-5) - [Module 6](https://www.baeldung.com/members/lesson-tag/module-6) - [Module 7](https://www.baeldung.com/members/lesson-tag/module-7) - [Module 8](https://www.baeldung.com/members/lesson-tag/module-8) - [Module 9](https://www.baeldung.com/members/lesson-tag/module-9) - [Module 10](https://www.baeldung.com/members/lesson-tag/module-10) - [Module 11](https://www.baeldung.com/members/lesson-tag/module-11) - [Module 12](https://www.baeldung.com/members/lesson-tag/module-12) - [Module 13](https://www.baeldung.com/members/lesson-tag/module-13) - [Module 14](https://www.baeldung.com/members/lesson-tag/module-14)