{"id":141965,"date":"2026-03-10T08:03:00","date_gmt":"2026-03-10T06:03:00","guid":{"rendered":"https:\/\/www.javacodegeeks.com\/?p=141965"},"modified":"2026-03-06T20:17:31","modified_gmt":"2026-03-06T18:17:31","slug":"spring-boot-4-spring-ai-and-ai-first-java-development","status":"publish","type":"post","link":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html","title":{"rendered":"Spring Boot 4, Spring AI, and\u00a0AI-First Java\u00a0Development"},"content":{"rendered":"<p><em>Jakarta EE 11, built-in API versioning, full modularisation, and LLM integration are all here now. Not on a roadmap \u2014 shipped. Here&#8217;s the complete picture.<\/em><\/p>\n<p>November 2025 was not a quiet month for Java.&nbsp;<a href=\"https:\/\/spring.io\/blog\/2025\/11\/20\/spring-boot-4-0-0-available-now\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Boot 4.0.0<\/a>&nbsp;went live on Maven Central on November 20th \u2014 the most significant major release since Spring Boot 3 arrived in 2022. Beneath it sat a fully updated&nbsp;<a href=\"https:\/\/spring.io\/projects\/spring-framework\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Framework 7<\/a>, and alongside it, a maturing&nbsp;<a href=\"https:\/\/spring.io\/projects\/spring-ai\" target=\"_blank\" rel=\"noreferrer noopener\">Spring AI<\/a>&nbsp;ecosystem that had reached 1.0 GA six months earlier and was already heading toward 2.0. Together, these releases mark a genuine generational shift \u2014 not a marketing phrase, but a structural one. The foundations change here.<\/p>\n<p>Moreover, this release is not incremental. Spring Boot 4 drops Jackson 2, removes JUnit 4 support entirely, eliminates Undertow, and breaks several long-standing configuration patterns. At the same time, it delivers things Java developers have wanted for years: first-class API versioning, built-in retry and concurrency limits, a coherent null safety story, and LLM integration that feels native to the Spring programming model. So let&#8217;s walk through it all, feature by feature, clearly and without exaggeration.<\/p>\n<h2 class=\"wp-block-heading\">1. Jakarta EE 11 \u2014 The Namespace Migration Completes<\/h2>\n<p>Spring Boot 3 already made the leap from&nbsp;<code>javax.*<\/code>&nbsp;to&nbsp;<code>jakarta.*<\/code>&nbsp;packages \u2014 a change that caused significant migration pain when it landed in 2022.&nbsp;<a href=\"https:\/\/www.infoq.com\/news\/2025\/11\/spring-7-spring-boot-4\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Boot 4 moves the Jakarta EE baseline from version 9 to version 11<\/a>, which is a less traumatic jump but still brings meaningful updates to the specifications your code depends on.<\/p>\n<p>Specifically, this brings&nbsp;<strong>Jakarta Servlet 6.1<\/strong>,&nbsp;<strong>Jakarta Persistence 3.2<\/strong>,&nbsp;<strong>Jakarta Bean Validation 3.1<\/strong>, and&nbsp;<strong>Jakarta WebSocket 2.2<\/strong>. On the persistence side, Hibernate ORM 7.1 is now the managed version, and notably it no longer allows detached entities to be silently reassociated with a persistence context \u2014 a change that can surface hidden bugs in existing applications if you&#8217;ve been relying on that lenient behaviour. Furthermore, Undertow has been removed entirely because it isn&#8217;t yet compatible with Servlet 6.1. If your application uses Undertow as its embedded container, migration to Tomcat 11 or Jetty 12.1 is required before upgrading.<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Breaking Changes to Know Before Upgrading<\/p>\n<p>Jackson 2.x support is gone \u2014 you&#8217;ll need Jackson 3.x. JUnit 4 is entirely removed in favour of JUnit Jupiter (JUnit 5). Undertow is no longer supported. All Spring Boot 3 deprecations have been removed, so clean those up first in 3.5 before touching 4.0. The Spring team strongly recommends upgrading to&nbsp;<a href=\"https:\/\/github.com\/spring-projects\/spring-boot\/wiki\/Spring-Boot-4.0-Release-Notes\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Boot 3.5<\/a>&nbsp;first, resolving all deprecation warnings, and only then migrating to 4.0.<\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\">2. Modularisation \u2014 Saying Goodbye to the Monolith JAR<\/h2>\n<p>If you&#8217;ve ever looked at the classpath of a Spring Boot 3 application and winced at how much of&nbsp;<code>spring-boot-autoconfigure<\/code>&nbsp;was loaded for things you don&#8217;t use, Spring Boot 4 addresses this directly.&nbsp;<a href=\"https:\/\/www.baeldung.com\/spring-boot-4-spring-framework-7\" target=\"_blank\" rel=\"noreferrer noopener\">The entire codebase has been split into 70+ focused modules<\/a>. Each technology integration now has its own dedicated module and starter, rather than everything being bundled into two enormous JARs.<\/p>\n<p>In practical terms, this means faster builds, smaller native images, and IDE auto-complete that no longer suggests configuration properties from technologies you never included. The change also improves GraalVM AOT processing \u2014 with fewer unused classes in the metadata graph, native compilation is both faster and produces smaller outputs. Additionally, the new&nbsp;<code>@ConfigurationPropertiesSource<\/code>&nbsp;annotation helps modular projects generate complete configuration metadata even when types live in separate modules at build time.<\/p>\n<p><em>pom.xml \u2014 Spring Boot 4 migration snippet<\/em><\/p>\n<pre class=\"brush:xml\">\n&lt;!-- Spring Boot 3 \u2014 monolithic starter --&gt;\n&lt;dependency&gt;\n  &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n  &lt;artifactId&gt;spring-boot-starter-web&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n\n&lt;!-- Spring Boot 4 \u2014 explicit modular starters --&gt;\n&lt;dependency&gt;\n  &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n  &lt;artifactId&gt;spring-boot-starter-webmvc&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n&lt;dependency&gt;\n  &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n  &lt;artifactId&gt;spring-boot-starter-jackson&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n\n&lt;!-- Classic starter available for gradual migration --&gt;\n&lt;dependency&gt;\n  &lt;groupId&gt;org.springframework.boot&lt;\/groupId&gt;\n  &lt;artifactId&gt;spring-boot-starter-classic&lt;\/artifactId&gt;\n&lt;\/dependency&gt;\n<\/pre>\n<h2 class=\"wp-block-heading\">3. Built-In API Versioning \u2014 Finally<\/h2>\n<p>This is the feature that generated the most excitement in the community \u2014 and rightly so. For years, API versioning in Spring was a DIY exercise. You either duplicated your controllers under different URL paths (<code>\/api\/v1\/orders<\/code>,&nbsp;<code>\/api\/v2\/orders<\/code>), wrote custom&nbsp;<code>RequestCondition<\/code>&nbsp;implementations, or pulled in a third-party library.&nbsp;<a href=\"https:\/\/www.infoq.com\/news\/2025\/11\/spring-7-spring-boot-4\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Framework 7 makes versioning a first-class citizen<\/a>, available in both Spring MVC and Spring WebFlux.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<p>The framework now supports four versioning strategies: path segment, HTTP header, query parameter, and media type. You configure the strategy once, then annotate your mappings with a&nbsp;<code>version<\/code>&nbsp;attribute. Spring handles the routing automatically. Equally important, there is built-in deprecation handling compliant with&nbsp;<a href=\"https:\/\/www.rfc-editor.org\/rfc\/rfc9745\" target=\"_blank\" rel=\"noreferrer noopener\">RFC 9745<\/a>&nbsp;\u2014 the standard for deprecating HTTP APIs \u2014 so you can mark old versions as sunset without any custom filter code.<\/p>\n<p><em>OrderController.java \u2014 Native API versioning in Spring Boot 4<\/em><\/p>\n<pre class=\"brush:java\">\n\/\/ application.properties \u2014 choose your versioning strategy\nspring.mvc.apiversion.use-header=X-API-Version\n\/\/ or: spring.mvc.apiversion.use-path-segment=1\n\/\/ or: spring.mvc.apiversion.use-media-type=true\n\n@RestController\n@RequestMapping(\"\/api\/orders\")\npublic class OrderController {\n\n  @GetMapping(path = \"\/{id}\", version = \"1.0\")\n  public OrderV1 getOrderV1(@PathVariable String id) { ... }\n\n  \/\/ Version 2.0 \u2014 same path, Spring routes automatically\n  @GetMapping(path = \"\/{id}\", version = \"2.0\")\n  public OrderV2 getOrderV2(@PathVariable String id) { ... }\n\n  \/\/ Mark old version as sunset \u2014 RFC 9745 compliant headers sent\n  @GetMapping(path = \"\/{id}\", version = \"0.9\", deprecated = true)\n  public OrderLegacy getLegacy(@PathVariable String id) { ... }\n}\n<\/pre>\n<h2 class=\"wp-block-heading\">4. JSpecify Null Safety \u2014 Null Pointers Get Harder to Hide<\/h2>\n<p>Java&#8217;s relationship with&nbsp;<code>null<\/code>&nbsp;has always been fraught. Every project has its own mix of&nbsp;<code>@Nonnull<\/code>,&nbsp;<code>@Nullable<\/code>,&nbsp;<code>@NotNull<\/code>, and similar annotations from different libraries \u2014 none of them interoperable.&nbsp;<a href=\"https:\/\/www.infoq.com\/news\/2025\/11\/spring-7-spring-boot-4\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Framework 7 adopts JSpecify as the single standard for null safety across the entire Spring portfolio<\/a>. The JSpecify collective includes OpenJDK, Broadcom, Google, JetBrains, and Sonar, which means the tooling support is genuinely good.<\/p>\n<p>In practice, this means&nbsp;<code>@NonNull<\/code>&nbsp;and&nbsp;<code>@Nullable<\/code>&nbsp;from&nbsp;<code>org.jspecify.annotations<\/code>&nbsp;are now the annotations you&#8217;ll see throughout Spring&#8217;s own APIs. Kotlin 2.2 (which is the new baseline for Kotlin in Spring Boot 4) automatically translates JSpecify annotations into Kotlin nullability, meaning you get type-safe null handling at the language level rather than just at the IDE hint level. IntelliJ IDEA 2025.3 ships full support for JSpecify-based data flow analysis. Consequently, null pointer exceptions that were previously silent at compile time now surface as warnings or errors much earlier in the development cycle.<\/p>\n<h2 class=\"wp-block-heading\">5. Built-In Resilience \u2014 @Retryable and @ConcurrencyLimit<\/h2>\n<p>Previously, retry logic in Spring applications required pulling in the separate&nbsp;<code>spring-retry<\/code>&nbsp;library and adding&nbsp;<code>@EnableRetry<\/code>&nbsp;to a configuration class. Spring Framework 7 moves retry and concurrency control directly into the core context. The&nbsp;<code>@Retryable<\/code>&nbsp;annotation now works out of the box, supports exponential back-off and jitter configuration, and automatically adapts to reactive methods when used in a WebFlux context. The companion&nbsp;<code>@ConcurrencyLimit<\/code>&nbsp;annotation implements the bulkhead pattern, capping the number of concurrent invocations of a method \u2014 particularly useful alongside virtual threads, where the risk of overwhelming downstream services increases because the JVM no longer applies natural backpressure through thread pool exhaustion.<\/p>\n<p class=\"has-text-align-center\"><strong>Spring Boot 4 \u2014 Feature Maturity at Launch<\/strong><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2026\/03\/\u03b1\u03c1\u03c7\u03b5\u03af\u03bf-\u03bb\u03ae\u03c8\u03b7\u03c2-9.png\"><img decoding=\"async\" width=\"464\" height=\"224\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2026\/03\/\u03b1\u03c1\u03c7\u03b5\u03af\u03bf-\u03bb\u03ae\u03c8\u03b7\u03c2-9.png\" alt=\"\" class=\"wp-image-141967\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2026\/03\/\u03b1\u03c1\u03c7\u03b5\u03af\u03bf-\u03bb\u03ae\u03c8\u03b7\u03c2-9.png 464w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2026\/03\/\u03b1\u03c1\u03c7\u03b5\u03af\u03bf-\u03bb\u03ae\u03c8\u03b7\u03c2-9-300x145.png 300w\" sizes=\"(max-width: 464px) 100vw, 464px\" \/><\/a><figcaption class=\"wp-element-caption\">Qualitative maturity rating (0\u2013100) of key Spring Boot 4 features based on documentation depth, community adoption signals, and framework completeness. Source: author assessment of official release notes.<\/figcaption><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">6. Spring AI \u2014 LLMs as First-Class Spring Beans<\/h2>\n<p>While Spring Boot 4 was the headline, the most strategically important shift in the Java ecosystem over the past eighteen months has been&nbsp;<a href=\"https:\/\/spring.io\/projects\/spring-ai\" target=\"_blank\" rel=\"noreferrer noopener\">Spring AI<\/a>&nbsp;reaching production readiness. Spring AI 1.0 went GA in May 2025. By the end of 2025, it had become the richest LLM integration framework on the JVM, and version 2.0 was already in milestone builds.<\/p>\n<p>The core design principle of Spring AI is familiar to any Spring developer:&nbsp;<strong>model-agnostic abstractions, auto-configuration, and Spring Boot starters<\/strong>. You select an AI provider \u2014 OpenAI, Anthropic, Google Gemini, Azure OpenAI, Amazon Bedrock, Ollama, Mistral, and others \u2014 add the corresponding starter dependency, provide an API key in your properties file, and inject a&nbsp;<code>ChatClient<\/code>&nbsp;or&nbsp;<code>ChatModel<\/code>&nbsp;bean exactly as you would any other Spring-managed dependency. Switching providers is a matter of changing your dependency and properties, not rewriting application code.<\/p>\n<h3 class=\"wp-block-heading\">6.1 RAG \u2014 Retrieval-Augmented Generation in Java<\/h3>\n<p>One of the most practically useful patterns in enterprise AI is Retrieval-Augmented Generation (RAG): rather than relying solely on the LLM&#8217;s training data, you retrieve relevant documents from your own data stores and include them in the prompt context.&nbsp;<a href=\"https:\/\/spring.io\/projects\/spring-ai\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring AI&#8217;s Advisors API<\/a>&nbsp;makes this pattern declarative. The framework ships with auto-configuration for Apache Cassandra, MongoDB Atlas, PostgreSQL with pgvector, Redis, Pinecone, Qdrant, Milvus, Weaviate, Chroma, and others as vector stores. The ETL framework handles document ingestion from S3, local file systems, MongoDB, and other sources, with PDF chunking via Apache Tika. For long-running conversations, the memory management features include compaction and retention policies.<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>&#8220;Spring AI applies familiar Spring ecosystem design principles \u2014 portability, modularity, and POJOs \u2014 to AI domain challenges. The goal is to make AI integration feel native to the Java developer, not a Python port.&#8221;\u2014 Spring AI design philosophy, spring.io\/projects\/spring-ai<\/p>\n<\/blockquote>\n<h3 class=\"wp-block-heading\">6.2 Tool Calling and MCP \u2014 Agents That Do Things<\/h3>\n<p>Beyond text generation, the most significant capability Spring AI provides is&nbsp;<strong>Tool Calling<\/strong>&nbsp;(also called Function Calling). This allows an LLM to invoke your Spring-managed methods at runtime when it decides additional context or action is needed. You annotate a method with&nbsp;<code>@Tool<\/code>, register it with the&nbsp;<code>ChatClient<\/code>, and the LLM can call it \u2014 Spring AI handles the JSON schema generation, the invocation, and the result injection back into the conversation context. Furthermore, Spring AI has integrated the&nbsp;<a href=\"https:\/\/modelcontextprotocol.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">Model Context Protocol (MCP)<\/a>&nbsp;\u2014 the standard protocol for connecting AI models to data sources and tools \u2014 both as an MCP client and as an MCP server. This means your Spring AI application can expose its tools to any MCP-compatible agent, or consume tools from any external MCP server.<\/p>\n<p><em>ChatService.java \u2014 Tool calling + RAG with Spring AI<\/em><\/p>\n<pre class=\"brush:java\">\n@Service\npublic class ProductAssistant {\n\n  private final ChatClient chatClient;\n\n  public ProductAssistant(ChatClient.Builder builder,\n                          VectorStore vectorStore) {\n    this.chatClient = builder\n      .defaultAdvisors(\n        new QuestionAnswerAdvisor(vectorStore), \/\/ RAG\n        new MessageChatMemoryAdvisor(new InMemoryChatMemory()) \/\/ memory\n      )\n      .build();\n  }\n\n  \/\/ Annotated method \u2014 LLM can invoke this as a tool\n  @Tool(description = \"Look up current stock level for a product SKU\")\n  public int checkStock(String sku) {\n    return inventoryService.getStock(sku);\n  }\n\n  public String ask(String question) {\n    return chatClient.prompt()\n      .user(question)\n      .tools(this)        \/\/ register tools from this bean\n      .call()\n      .content();\n  }\n}\n<\/pre>\n<h2 class=\"wp-block-heading\">7. Spring Boot 4 vs. 3.x \u2014 What Changed Where<\/h2>\n<figure class=\"wp-block-table\">\n<table class=\"has-fixed-layout\">\n<thead>\n<tr>\n<th class=\"has-text-align-left\" data-align=\"left\">Feature<\/th>\n<th class=\"has-text-align-left\" data-align=\"left\">Spring Boot 3.x<\/th>\n<th class=\"has-text-align-left\" data-align=\"left\">Spring Boot 4.0<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><strong>Jakarta EE<\/strong><\/td>\n<td>EE 9 \/ EE 10<\/td>\n<td>EE 11 (Servlet 6.1, JPA 3.2)<\/td>\n<\/tr>\n<tr>\n<td><strong>API Versioning<\/strong><\/td>\n<td>Manual \/ DIY<\/td>\n<td>Built-in (path, header, query, media type)<\/td>\n<\/tr>\n<tr>\n<td><strong>Null Safety<\/strong><\/td>\n<td>Mixed annotations<\/td>\n<td>JSpecify portfolio-wide<\/td>\n<\/tr>\n<tr>\n<td><strong>Retry \/ Bulkhead<\/strong><\/td>\n<td>External spring-retry<\/td>\n<td>Built-in @Retryable, @ConcurrencyLimit<\/td>\n<\/tr>\n<tr>\n<td><strong>Modularisation<\/strong><\/td>\n<td>Monolithic autoconfigure JAR<\/td>\n<td>70+ focused modules<\/td>\n<\/tr>\n<tr>\n<td><strong>Jackson<\/strong><\/td>\n<td>Jackson 2.x<\/td>\n<td>Jackson 3.x required<\/td>\n<\/tr>\n<tr>\n<td><strong>JUnit<\/strong><\/td>\n<td>JUnit 4 + JUnit 5<\/td>\n<td>JUnit Jupiter only<\/td>\n<\/tr>\n<tr>\n<td><strong>Undertow<\/strong><\/td>\n<td>Supported<\/td>\n<td>Removed (Servlet 6.1 incompatible)<\/td>\n<\/tr>\n<tr>\n<td><strong>Kotlin<\/strong><\/td>\n<td>Kotlin 1.x \/ 2.0<\/td>\n<td>Kotlin 2.2 baseline<\/td>\n<\/tr>\n<tr>\n<td><strong>GraalVM<\/strong><\/td>\n<td>GraalVM 23+<\/td>\n<td>GraalVM 25 required<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/figure>\n<h2 class=\"wp-block-heading\">8. Spring AI \u2014 Provider &amp; Vector Store Coverage<\/h2>\n<p class=\"has-text-align-center\"><strong>Spring AI 1.0 GA \u2014 Supported AI Providers vs. Vector Stores<\/strong><\/p>\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><a href=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2026\/03\/\u03b1\u03c1\u03c7\u03b5\u03af\u03bf-\u03bb\u03ae\u03c8\u03b7\u03c2-10.png\"><img decoding=\"async\" width=\"464\" height=\"224\" src=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2026\/03\/\u03b1\u03c1\u03c7\u03b5\u03af\u03bf-\u03bb\u03ae\u03c8\u03b7\u03c2-10.png\" alt=\"\" class=\"wp-image-141968\" srcset=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2026\/03\/\u03b1\u03c1\u03c7\u03b5\u03af\u03bf-\u03bb\u03ae\u03c8\u03b7\u03c2-10.png 464w, https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2026\/03\/\u03b1\u03c1\u03c7\u03b5\u03af\u03bf-\u03bb\u03ae\u03c8\u03b7\u03c2-10-300x145.png 300w\" sizes=\"(max-width: 464px) 100vw, 464px\" \/><\/a><figcaption class=\"wp-element-caption\">Counts of officially auto-configured integrations in Spring AI 1.0 GA. Source: spring.io\/projects\/spring-ai and Spring AI GitHub.<\/figcaption><\/figure>\n<\/div>\n<h2 class=\"wp-block-heading\">9. The Migration Path \u2014 Where to Start<\/h2>\n<p>The Spring team is clear on the recommended path:&nbsp;<strong>get to Spring Boot 3.5 first<\/strong>. That means fixing every deprecation warning in your current codebase before you touch the 4.0 migration. Any deprecated API that survived into 3.5 is gone in 4.0 with no fallback. Once you&#8217;re clean on 3.5, the jump to 4.0 is primarily about three things: updating your starters to the new modular names (classic starters are available as a bridge), migrating from Jackson 2 to Jackson 3, and removing any remaining&nbsp;<code>javax.*<\/code>&nbsp;imports that might have slipped through the Boot 3 migration.<\/p>\n<p>For Spring AI specifically, the quickest entry point is&nbsp;<a href=\"https:\/\/start.spring.io\/\" target=\"_blank\" rel=\"noreferrer noopener\">start.spring.io<\/a>, which now surfaces all AI provider starters and vector store options in the dependency selector. You pick your model provider, pick your vector store if needed, and the Initializr generates a project with the correct dependencies and auto-configuration already wired. From there, you need an API key in your properties file and a&nbsp;<code>ChatClient<\/code>&nbsp;injection to make your first LLM call.<\/p>\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>Spring AI Framework Support Matrix (March 2026)<\/p>\n<p><strong>Spring Boot 3.3+<\/strong>&nbsp;\u2014 Spring AI 1.0 GA fully supported.&nbsp;<strong>Spring Boot 4.0<\/strong>&nbsp;\u2014 Spring AI 2.0 milestone compatible; GA expected mid-2026. Spring Cloud, Spring Modulith 2.0, Spring Security 7, and Spring Batch 6 all shipped Spring Boot 4 compatible GA versions alongside the Boot 4 release. Spring AI 2.0 GA is the one remaining holdout on the Boot 4 train.<\/p>\n<\/blockquote>\n<h2 class=\"wp-block-heading\">10. What We&#8217;ve Learned<\/h2>\n<p><a href=\"https:\/\/spring.io\/blog\/2025\/11\/20\/spring-boot-4-0-0-available-now\/\" target=\"_blank\" rel=\"noreferrer noopener\">Spring Boot 4<\/a>, released November 20, 2025, is the most structurally significant Spring release since the move to Jakarta EE in 2022. It delivers&nbsp;<strong>Jakarta EE 11<\/strong>, a fully modularised codebase across 70+ focused modules, native&nbsp;<strong>API versioning<\/strong>&nbsp;for both MVC and WebFlux,&nbsp;<strong>JSpecify<\/strong>&nbsp;null safety across the entire portfolio, and first-class support for Java 25 \u2014 all while keeping a Java 17 minimum for existing applications.<\/p>\n<p>Breaking changes are real: Jackson 3 is required, JUnit 4 is gone, Undertow is removed, and all Spring Boot 3 deprecations have been cleared out. The migration path is upgrade to 3.5 first, clean up deprecations, then move to 4.0. Classic starters bridge the modularisation gap for teams that need a gradual transition.<\/p>\n<p>Alongside Boot 4,&nbsp;<a href=\"https:\/\/spring.io\/projects\/spring-ai\" target=\"_blank\" rel=\"noreferrer noopener\">Spring AI<\/a>&nbsp;has matured into a production-ready LLM integration layer for enterprise Java. With model-agnostic abstractions, RAG pipelines, tool calling, MCP support, and auto-configuration for 10+ vector stores, it brings the patterns that Python&#8217;s LangChain pioneered directly into the Spring programming model \u2014 with the type safety and observability that Java teams expect. Spring AI 2.0 GA, targeting Spring Boot 4 compatibility, is the next milestone to watch.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jakarta EE 11, built-in API versioning, full modularisation, and LLM integration are all here now. Not on a roadmap \u2014 shipped. Here&#8217;s the complete picture. November 2025 was not a quiet month for Java.&nbsp;Spring Boot 4.0.0&nbsp;went live on Maven Central on November 20th \u2014 the most significant major release since Spring Boot 3 arrived in &hellip;<\/p>\n","protected":false},"author":1010,"featured_media":121875,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[1201,2764,4912],"class_list":["post-141965","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-enterprise-java","tag-enterprise-java","tag-spring-ai","tag-spring-boot-4-2"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Spring Boot 4, Spring AI, and\u00a0AI-First Java\u00a0Development - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"Spring Boot 4 landed in November 2025 with Jakarta EE 11, native API versioning, full modularisation, and JSpecify null safety.\" \/>\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.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Spring Boot 4, Spring AI, and\u00a0AI-First Java\u00a0Development - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"Spring Boot 4 landed in November 2025 with Jakarta EE 11, native API versioning, full modularisation, and JSpecify null safety.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html\" \/>\n<meta property=\"og:site_name\" content=\"Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-10T06:03:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/04\/spring-boot-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Eleftheria Drosopoulou\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Eleftheria Drosopoulou\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html\"},\"author\":{\"name\":\"Eleftheria Drosopoulou\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/5fe56fff01ece0694747967c7217bca4\"},\"headline\":\"Spring Boot 4, Spring AI, and\u00a0AI-First Java\u00a0Development\",\"datePublished\":\"2026-03-10T06:03:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html\"},\"wordCount\":1972,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/spring-boot-logo.jpg\",\"keywords\":[\"Enterprise Java\",\"spring ai\",\"Spring Boot 4\"],\"articleSection\":[\"Enterprise Java\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html\",\"name\":\"Spring Boot 4, Spring AI, and\u00a0AI-First Java\u00a0Development - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/spring-boot-logo.jpg\",\"datePublished\":\"2026-03-10T06:03:00+00:00\",\"description\":\"Spring Boot 4 landed in November 2025 with Jakarta EE 11, native API versioning, full modularisation, and JSpecify null safety.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html#primaryimage\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/spring-boot-logo.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2024\\\/04\\\/spring-boot-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/2026\\\/03\\\/spring-boot-4-spring-ai-and-ai-first-java-development.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Enterprise Java\",\"item\":\"https:\\\/\\\/www.javacodegeeks.com\\\/category\\\/java\\\/enterprise-java\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Spring Boot 4, Spring AI, and\u00a0AI-First Java\u00a0Development\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#website\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Developers Resource Center\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.javacodegeeks.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2022\\\/06\\\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/javacodegeeks\",\"https:\\\/\\\/x.com\\\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/#\\\/schema\\\/person\\\/5fe56fff01ece0694747967c7217bca4\",\"name\":\"Eleftheria Drosopoulou\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/Eleftheria-Drosopoulou-96x96.jpg\",\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/Eleftheria-Drosopoulou-96x96.jpg\",\"contentUrl\":\"https:\\\/\\\/www.javacodegeeks.com\\\/wp-content\\\/uploads\\\/2015\\\/03\\\/Eleftheria-Drosopoulou-96x96.jpg\",\"caption\":\"Eleftheria Drosopoulou\"},\"description\":\"Eleftheria is an Experienced Business Analyst with a robust background in the computer software industry. Proficient in Computer Software Training, Digital Marketing, HTML Scripting, and Microsoft Office, they bring a wealth of technical skills to the table. Additionally, she has a love for writing articles on various tech subjects, showcasing a talent for translating complex concepts into accessible content.\",\"sameAs\":[\"http:\\\/\\\/www.javacodegeeks.com\\\/\"],\"url\":\"https:\\\/\\\/www.javacodegeeks.com\\\/author\\\/eleftheria-drosopoulou\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Spring Boot 4, Spring AI, and\u00a0AI-First Java\u00a0Development - Java Code Geeks","description":"Spring Boot 4 landed in November 2025 with Jakarta EE 11, native API versioning, full modularisation, and JSpecify null safety.","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.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html","og_locale":"en_US","og_type":"article","og_title":"Spring Boot 4, Spring AI, and\u00a0AI-First Java\u00a0Development - Java Code Geeks","og_description":"Spring Boot 4 landed in November 2025 with Jakarta EE 11, native API versioning, full modularisation, and JSpecify null safety.","og_url":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html","og_site_name":"Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2026-03-10T06:03:00+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/04\/spring-boot-logo.jpg","type":"image\/jpeg"}],"author":"Eleftheria Drosopoulou","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Eleftheria Drosopoulou","Est. reading time":"9 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html#article","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html"},"author":{"name":"Eleftheria Drosopoulou","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/5fe56fff01ece0694747967c7217bca4"},"headline":"Spring Boot 4, Spring AI, and\u00a0AI-First Java\u00a0Development","datePublished":"2026-03-10T06:03:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html"},"wordCount":1972,"commentCount":0,"publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/04\/spring-boot-logo.jpg","keywords":["Enterprise Java","spring ai","Spring Boot 4"],"articleSection":["Enterprise Java"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html","url":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html","name":"Spring Boot 4, Spring AI, and\u00a0AI-First Java\u00a0Development - Java Code Geeks","isPartOf":{"@id":"https:\/\/www.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html#primaryimage"},"image":{"@id":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html#primaryimage"},"thumbnailUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/04\/spring-boot-logo.jpg","datePublished":"2026-03-10T06:03:00+00:00","description":"Spring Boot 4 landed in November 2025 with Jakarta EE 11, native API versioning, full modularisation, and JSpecify null safety.","breadcrumb":{"@id":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html#primaryimage","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/04\/spring-boot-logo.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2024\/04\/spring-boot-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/www.javacodegeeks.com\/2026\/03\/spring-boot-4-spring-ai-and-ai-first-java-development.html#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"Java","item":"https:\/\/www.javacodegeeks.com\/category\/java"},{"@type":"ListItem","position":3,"name":"Enterprise Java","item":"https:\/\/www.javacodegeeks.com\/category\/java\/enterprise-java"},{"@type":"ListItem","position":4,"name":"Spring Boot 4, Spring AI, and\u00a0AI-First Java\u00a0Development"}]},{"@type":"WebSite","@id":"https:\/\/www.javacodegeeks.com\/#website","url":"https:\/\/www.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Developers Resource Center","publisher":{"@id":"https:\/\/www.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/www.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/www.javacodegeeks.com\/#\/schema\/person\/5fe56fff01ece0694747967c7217bca4","name":"Eleftheria Drosopoulou","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2015\/03\/Eleftheria-Drosopoulou-96x96.jpg","url":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2015\/03\/Eleftheria-Drosopoulou-96x96.jpg","contentUrl":"https:\/\/www.javacodegeeks.com\/wp-content\/uploads\/2015\/03\/Eleftheria-Drosopoulou-96x96.jpg","caption":"Eleftheria Drosopoulou"},"description":"Eleftheria is an Experienced Business Analyst with a robust background in the computer software industry. Proficient in Computer Software Training, Digital Marketing, HTML Scripting, and Microsoft Office, they bring a wealth of technical skills to the table. Additionally, she has a love for writing articles on various tech subjects, showcasing a talent for translating complex concepts into accessible content.","sameAs":["http:\/\/www.javacodegeeks.com\/"],"url":"https:\/\/www.javacodegeeks.com\/author\/eleftheria-drosopoulou"}]}},"_links":{"self":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/141965","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/users\/1010"}],"replies":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=141965"}],"version-history":[{"count":0,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/141965\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media\/121875"}],"wp:attachment":[{"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=141965"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=141965"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=141965"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}