{"id":22063,"date":"2023-08-28T16:05:24","date_gmt":"2023-08-28T14:05:24","guid":{"rendered":"https:\/\/www.angulararchitects.io\/?page_id=22063"},"modified":"2025-05-23T15:46:01","modified_gmt":"2025-05-23T13:46:01","slug":"webinar-bridging-the-gap-between-spring-and-angular-with-openapi","status":"publish","type":"page","link":"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/","title":{"rendered":"Webinar: Bridging the Gap between Spring and Angular with OpenAPI"},"content":{"rendered":"  \n<div class=\"hero\">\n  <div class=\"hero-ow\">\n    <div class=\"hero-iw\">\n      <div class=\"hero-image-spacer\">\n                <div data-responsive-background-image style=\"\" class=\"hero-image\n            image-position-vertical-desktop-center\n            image-position-horizontal-desktop-center\n            image-position-vertical-tablet-center\n            image-position-horizontal-tablet-center\n            image-position-vertical-mobile-center\n            image-position-horizontal-mobile-center\" fetchPriority=\"high\">\n\n          <img decoding=\"async\" alt=\"\" rel=\"preload\" fetchPriority=\"high\" class=\"responsive-background-image\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2020\/09\/shutterstock-574939951.jpg\" srcset=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2020\/09\/shutterstock-574939951.jpg 2048w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2020\/09\/shutterstock-574939951-600x268.jpg 600w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2020\/09\/shutterstock-574939951-300x134.jpg 300w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2020\/09\/shutterstock-574939951-1024x458.jpg 1024w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2020\/09\/shutterstock-574939951-768x344.jpg 768w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2020\/09\/shutterstock-574939951-1536x687.jpg 1536w\">\n        <\/div>\n      <\/div>\n      <div class=\"hero-box-spacer\">\n        <div class=\"hero-box-dummy-top\"><\/div>\n        <div class=\"hero-box-wrapper\" style=\"background-color: #cd0f41;\">\n          <div class=\"hero-box\">\n                          <div class=\"hero-hashtag\">#webinar<\/div>\n                                      <h1 class=\"hero-heading\">Bridging the Gap between Spring and Angular with OpenAPI<\/h1>\n                                      <div class=\"hero-body-text\">Webinar with Rainer Hahnekamp<\/div>\n                                  <\/div>\n        <\/div>\n      <\/div>\n      <div class=\"hero-box-dummy-bottom-desktop\" style=\"background-color: #cd0f41;\"><\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n  \n\n  \n\n  \n<div class=\"cta-default cta  has-background has-light-red-background-color\"\">\n  <div class=\"cta-default-ow\">\n    <div class=\"cta-default-iw  \">\n      <div class=\"cta-text-content\">\n                \n        \n        <div class=\"cta-text has-text-color has-full-white-color\"><h3>September 11, 2023, 18:00 &#8211; 19:30 CEST (Berlin, Vienna, &#8230;)<\/h3>\n<\/div>        \n        <a class=\"button is-style-pink\" href=\"&#x23;register\" target=\"_self\">Register now!<\/a>        \n              <\/div>\n      \n          <\/div>\n  <\/div>\n<\/div>\n\n\n\n<figure class=\"wp-block-image alignfull size-large logo-row\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"145\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-1024x145.png\" alt=\"\" class=\"wp-image-30011\" srcset=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-1024x145.png 1024w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-300x43.png 300w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-768x109.png 768w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-1536x218.png 1536w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-2048x290.png 2048w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-600x85.png 600w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n  \n\n\n<div class=\"image-html-content pe\">\n  <div class=\"image-html-content-ow pe-ow\">\n    <div class=\"image-html-content-iw pe-iw   no-padding-bottom\">\n              <div class=\"image-part \">\n          <img decoding=\"async\" class=\"image\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/03\/rainer-hahnekamp.png\" srcset=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/03\/rainer-hahnekamp.png 219w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/03\/rainer-hahnekamp-100x100.png 100w, https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2022\/03\/rainer-hahnekamp-150x150.png 150w\" alt=\"\" style=\"max-width: px;\"\/>\n        <\/div>\n            <div class=\"html-part\">\n        <p>Spring and Angular are popular choices for web applications, yet a notable gap often exists between them. Discrepancies in types and DTOs between Spring Controllers and Angular applications can lead to unforeseen issues.<\/p>\n<p>Enter OpenAPI, a powerful solution that allows us to define APIs using a YAML file. OpenAPI then automatically generates Spring Controllers and Java classes, ensuring consistency and alignment. This tool also proves valuable for existing APIs, as it analyzes Spring to generate specifications on-the-fly.<\/p>\n<p>Join this hands-on webinar to explore both options in depth. Learn how to customize OpenAPI for your specific needs and tackle advanced scenarios like APIs for file uploading and downloading.<\/p>\n<h2>\u00a0<\/h2>\n<h2><strong>About your Trainer<\/strong><\/h2>\n<p>Rainer Hahnekamp is an experienced software developer and architect for enterprise applications. For more than 15 years, he worked as a team lead for the implementation of production-critical applications for the well-known US confectionery manufacturer Mars. He and his team used Angular and Spring.<\/p>\n<p>The business informatics graduate regularly speaks at conferences and writes for various magazines. His YouTube channel Ng-News reports weekly on all the innovations in the Angular community in the form of a short video (100 seconds).<\/p>\n\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n  \n\n\n<div class=\"image-html-content pe\">\n  <div class=\"image-html-content-ow pe-ow\">\n    <div class=\"image-html-content-iw pe-iw   no-padding-bottom\">\n            <div class=\"html-part\">\n        <h2>What am I learning?<\/h2>\n<p>\u2705 Contract First vs. Code First with OpenAPI (Swagger)<br \/>\n\u2705 Generating Spring Controllers<br \/>\n\u2705 Generating Angular Proxies<br \/>\n\u2705 Pitfalls and Special Cases<\/p>\n\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n  \n\n\n<div class=\"image-html-content pe\">\n  <div class=\"image-html-content-ow pe-ow\">\n    <div class=\"image-html-content-iw pe-iw   \">\n            <div class=\"html-part\">\n        <h2>What do I get?<\/h2>\n<p>\u2611\ufe0f Participation in the webinar<br \/>\n\u2611\ufe0f Possibility to ask questions<br \/>\n\u2611\ufe0f Recording of the webinar<br \/>\n\u2611\ufe0f All slides and examples<\/p>\n\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>\n\n\n  \n<div class=\"cta-newsletter\" style=\"background-color: #cd0f41; color: #FFFFFF;\">\n  <div class=\"cta-newsletter-ow\">\n    <div class=\"cta-newsletter-iw \">\n                                      \n        \n\n  <h2 id=\"register\" class=\"heading cta-heading  \">Register and Join for Free!<\/h2>\n\n            <div class=\"cta-text\">Register now for our newsletter and get your free webinar access! You can unsubscribe at any time!\r\n\r\n<script src=\"\/custom\/subscribe-mc.js\"><\/script>\r\n<div id=\"campaign\" campaign-id=\"15\" campaign-lang=\"en\"><\/div>\r\n<\/div>\n      <div class=\"cta-form\">\n        <div class=\"cta-form\">\n                      \n                  <\/div>\n      <\/div>\n    <\/div>\n  <\/div>\n<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":25,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":""},"class_list":["post-22063","page","type-page","status-publish","hentry"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Webinar: Bridging the Gap between Spring and Angular with OpenAPI - ANGULARarchitects<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Webinar: Bridging the Gap between Spring and Angular with OpenAPI - ANGULARarchitects\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/\" \/>\n<meta property=\"og:site_name\" content=\"ANGULARarchitects\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-23T13:46:01+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-1024x145.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/\",\"name\":\"Webinar: Bridging the Gap between Spring and Angular with OpenAPI - ANGULARarchitects\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-1024x145.png\",\"datePublished\":\"2023-08-28T14:05:24+00:00\",\"dateModified\":\"2025-05-23T13:46:01+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/#primaryimage\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-1024x145.png\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-1024x145.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.angulararchitects.io\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Webinar: Bridging the Gap between Spring and Angular with OpenAPI\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"name\":\"ANGULARarchitects\",\"description\":\"AngularArchitects.io\",\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\",\"name\":\"ANGULARarchitects\",\"alternateName\":\"SOFTWAREarchitects\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"width\":644,\"height\":216,\"caption\":\"ANGULARarchitects\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/github.com\/angular-architects\",\"https:\/\/www.linkedin.com\/company\/angular-architects\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Webinar: Bridging the Gap between Spring and Angular with OpenAPI - ANGULARarchitects","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/","og_locale":"en_US","og_type":"article","og_title":"Webinar: Bridging the Gap between Spring and Angular with OpenAPI - ANGULARarchitects","og_url":"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/","og_site_name":"ANGULARarchitects","article_modified_time":"2025-05-23T13:46:01+00:00","og_image":[{"url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-1024x145.png","type":"","width":"","height":""}],"twitter_card":"summary_large_image","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/","url":"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/","name":"Webinar: Bridging the Gap between Spring and Angular with OpenAPI - ANGULARarchitects","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/#primaryimage"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-1024x145.png","datePublished":"2023-08-28T14:05:24+00:00","dateModified":"2025-05-23T13:46:01+00:00","breadcrumb":{"@id":"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/#primaryimage","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-1024x145.png","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/04\/AngularArchitects-Kudennlogos-in-einem-1024x145.png"},{"@type":"BreadcrumbList","@id":"https:\/\/www.angulararchitects.io\/en\/webinar-bridging-the-gap-between-spring-and-angular-with-openapi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.angulararchitects.io\/en\/"},{"@type":"ListItem","position":2,"name":"Webinar: Bridging the Gap between Spring and Angular with OpenAPI"}]},{"@type":"WebSite","@id":"https:\/\/www.angulararchitects.io\/en\/#website","url":"https:\/\/www.angulararchitects.io\/en\/","name":"ANGULARarchitects","description":"AngularArchitects.io","publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.angulararchitects.io\/en\/#organization","name":"ANGULARarchitects","alternateName":"SOFTWAREarchitects","url":"https:\/\/www.angulararchitects.io\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","width":644,"height":216,"caption":"ANGULARarchitects"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/github.com\/angular-architects","https:\/\/www.linkedin.com\/company\/angular-architects\/"]}]}},"_links":{"self":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/pages\/22063","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/users\/25"}],"replies":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/comments?post=22063"}],"version-history":[{"count":10,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/pages\/22063\/revisions"}],"predecessor-version":[{"id":30302,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/pages\/22063\/revisions\/30302"}],"wp:attachment":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media?parent=22063"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}