{"id":6169,"date":"2023-07-28T13:24:08","date_gmt":"2023-07-28T11:24:08","guid":{"rendered":"https:\/\/kabisa.nl\/?p=6169"},"modified":"2023-10-14T13:50:39","modified_gmt":"2023-10-14T11:50:39","slug":"catching-common-java-mistakes-with-error-prone","status":"publish","type":"post","link":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/","title":{"rendered":"Catching common Java mistakes with Error Prone"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"6169\" class=\"elementor elementor-6169\" data-elementor-post-type=\"post\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-e7a98a2 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"e7a98a2\" data-element_type=\"section\" data-e-type=\"section\" data-settings=\"{&quot;jet_parallax_layout_list&quot;:[]}\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-e92e0b3\" data-id=\"e92e0b3\" data-element_type=\"column\" data-e-type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-6ef69c1 elementor-widget elementor-widget-text-editor\" data-id=\"6ef69c1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>Last month a few colleagues and I went to J-SPRING in Utrecht. We were really intrigued by a talk about\u00a0<a href=\"https:\/\/errorprone.info\/\">Error Prone<\/a>\u00a0by Rick Ossendrijver and decided to explore the possibility of using this within Kabisa. Error Prone is a powerful software analysis tool created by Google that helps developers detect and fix coding errors in Java that are not detected by the compiler. I\u2019ll show some simple examples of how it works, how easy it is to add custom checks and what to take into account when enrolling it within your team.\u200b<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-822420f elementor-widget elementor-widget-text-editor\" data-id=\"822420f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Quality and uniformity inside your codebase<\/h2><p>I think we\u2019ve all had PR reviews where we notice the same coding mistake \/ convention keeps recurring. Error Prone can help you spot and fix these issues automatically, resulting in more efficient code reviews.\u200bLet\u2019s take a look at a simple example:\u200b<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7f5ce22 elementor-widget elementor-widget-code-highlight\" data-id=\"7f5ce22\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-java line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-java\">\n\t\t\t\t\t<xmp>String company = \"Kabisa\";\nString message = \"Would you like to join \" + company + \"?\";\n\u200b\nSystem.out.println(message);<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-1f3c429 elementor-widget elementor-widget-text-editor\" data-id=\"1f3c429\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>While this code works correctly, it can be improved for readability and performance. Error Prone provides a check called \u2018StringConcat\u2019 that can suggest using \u2018StringBuilder\u2019 or \u2018String.format()\u2019 instead of concatenation with the \u2018+\u2019 operator.\u200bHere\u2019s an updated version of the code that follows the recommended convention:\u200b<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-ba5f829 elementor-widget elementor-widget-code-highlight\" data-id=\"ba5f829\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-java line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-java\">\n\t\t\t\t\t<xmp>String company = \"Kabisa\";\nString message = String.format(\"Would you like to join %s?\", company)\n\u200b\nSystem.out.println(message);<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d681e2b elementor-widget elementor-widget-text-editor\" data-id=\"d681e2b\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u200b\u200bWhen running Error Prone with the \u2018StringConcat\u2019 check, it would first provide a warning or suggestion to use \u2018StringBuilder\u2019 or \u2018String.format()\u2019. Error Prone also has the ability to generate patch files containing recommended fixes, and it also offers the option to apply those changes directly to the codebase. This would be great to use in a pre-commit hook, making sure these issues don\u2019t end up in your PR.\u200b\u200b<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-52f22e1 elementor-widget elementor-widget-text-editor\" data-id=\"52f22e1\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>Custom checks<\/h2><p>Ofcourse, every project \/ domain has its own unique requirements and coding conventions. By adding custom checks, you can enforce specific rules or patterns that are relevant to your project, domain or organization. Adding these checks is done by using\u00a0<a href=\"https:\/\/errorprone.info\/docs\/refaster\">Refaster templates<\/a>, a before\/after java refactoring tool by Google, which is bundled with Error Prone.\u200bIn the code below you can find an example of one of these custom rules.\u200b\u200b<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3d74d1f elementor-widget elementor-widget-code-highlight\" data-id=\"3d74d1f\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"code-highlight.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<div class=\"prismjs-tomorrow copy-to-clipboard \">\n\t\t\t<pre data-line=\"\" class=\"highlight-height language-java line-numbers\">\n\t\t\t\t<code readonly=\"true\" class=\"language-java\">\n\t\t\t\t\t<xmp>import com.google.errorprone.refaster.annotation.AfterTemplate;\nimport com.google.errorprone.refaster.annotation.AlsoNegation;\nimport com.google.errorprone.refaster.annotation.BeforeTemplate;\n\u200b\npublic class StringIsEmpty {\n@BeforeTemplate\nboolean equalsEmptyString(String string) {\nreturn string.equals(\"\");\n}\n\u200b\n@BeforeTemplate\nboolean lengthEquals0(String string) {\nreturn string.length() == 0;\n}\n\u200b\n@AfterTemplate\n@AlsoNegation\nboolean optimizedMethod(String string) {\nreturn string.isEmpty();\n}\n}<\/xmp>\n\t\t\t\t<\/code>\n\t\t\t<\/pre>\n\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e5cbd8d elementor-widget elementor-widget-text-editor\" data-id=\"e5cbd8d\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<p>\u200b\u200bWhere @BeforeTemplate defines the conditions that should trigger this rule and @AfterTemplate defines the correct replacement.\u200b\u200b<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-962fd6c elementor-widget elementor-widget-text-editor\" data-id=\"962fd6c\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2 id=\"build-tool-integration\">Build tool integration<\/h2><p>Error Prone runs within your standard build process, supporting several build tools like Maven, Gradle and Ant. It\u2019s as simple as adding the dependency and making sure it runs during your normal build process. Information about how to install it in your Java project can be found\u00a0<a href=\"https:\/\/errorprone.info\/docs\/installation\">here<\/a>.\u200b<\/p><h2 id=\"convincing-your-co-workers-to-invest-in-error-prone\">Convincing your co-workers to invest in Error Prone.<\/h2><p>To achieve successful rollout within a team\/company, effective communication plays a crucial role. When integrating Error Prone into the Java environment, it becomes imperative for developers and teams to engage in open dialogues. By involving developers from the early stages and clearly communicating the advantages of Error Prone, teams can collectively establish coding guidelines and rules that will be enforced. This collaborative approach not only helps set expectations but also ensures that developers comprehend how Error Prone fits into the development workflow, minimizing the likelihood of it being perceived as a burden.\u200b<\/p><h2 id=\"comparing-it-to-other-code-analysis-tools\">Comparing it to other code analysis tools<\/h2><p>While there are several other code analysis tools available for Java, like SonarQube, Checkstyle and FindBugs, Error Prone offers some unique features and advantages.<\/p><ul><li><em>Customizability<\/em>; Error Prone allows you to customize and extend its set of checks. Allowing you to easily create your own rules or configure the existing ones to fit your specific needs and coding standards.<\/li><li><em>Patching<\/em>; As mentioned before, Error Prone also offers the ability to patch the warnings\/errors it has identified, automating this replacement process.<\/li><li><em>Build tool integration<\/em>; This allows you to easily incorporate Error Prone into your build process and automate the analysis and patching of your codebase.<\/li><\/ul><h2 id=\"conclusion\">Conclusion<\/h2><p>Error Prone is a powerful tool for Java developers that enhances code quality and efficiency. By seamlessly integrating into existing workflows, it automates the detection and correction of common coding mistakes. Error Prone\u2019s customizable checks enable developers to enforce project-specific conventions, ensuring uniformity within the codebase. Effective communication and collaboration are key to successfully implementing Error Prone, as it fosters open dialogues and aligns developers with its advantages.\u200b<\/p><p>Overall I think Error Prone can be a great addition to our development process, and we\u2019re definitely going to try it out on one of our repositories!<\/p>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>Last month a few colleagues and I went to J-SPRING in Utrecht. We were really intrigued by a talk about\u00a0Error Prone\u00a0by Rick Ossendrijver and decided to explore the possibility of using this within Kabisa. Error Prone is a powerful software analysis tool created by Google that helps developers detect and fix coding errors in Java [&hellip;]<\/p>\n","protected":false},"author":16,"featured_media":6179,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[149],"tags":[],"class_list":["post-6169","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tech"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Catching common Java mistakes with Error Prone | Kabisa Software Artisans<\/title>\n<meta name=\"description\" content=\"Last month a few colleagues and I went to J-SPRING in Utrecht. We were really intrigued by a talk about\u00a0Error Prone\u00a0by Rick Ossendrijver and decided to\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Catching common Java mistakes with Error Prone | Kabisa Software Artisans\" \/>\n<meta property=\"og:description\" content=\"Last month a few colleagues and I went to J-SPRING in Utrecht. We were really intrigued by a talk about\u00a0Error Prone\u00a0by Rick Ossendrijver and decided to\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/\" \/>\n<meta property=\"og:site_name\" content=\"Kabisa Software Artisans\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kabisaict\" \/>\n<meta property=\"article:published_time\" content=\"2023-07-28T11:24:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-10-14T11:50:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kabisa.nl\/wp-content\/uploads\/2023\/07\/kabisa-java.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1400\" \/>\n\t<meta property=\"og:image:height\" content=\"800\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Daan de Rond\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Daan de Rond\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Catching common Java mistakes with Error Prone | Kabisa Software Artisans","description":"Last month a few colleagues and I went to J-SPRING in Utrecht. We were really intrigued by a talk about\u00a0Error Prone\u00a0by Rick Ossendrijver and decided to","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:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/","og_locale":"en_US","og_type":"article","og_title":"Catching common Java mistakes with Error Prone | Kabisa Software Artisans","og_description":"Last month a few colleagues and I went to J-SPRING in Utrecht. We were really intrigued by a talk about\u00a0Error Prone\u00a0by Rick Ossendrijver and decided to","og_url":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/","og_site_name":"Kabisa Software Artisans","article_publisher":"https:\/\/www.facebook.com\/kabisaict","article_published_time":"2023-07-28T11:24:08+00:00","article_modified_time":"2023-10-14T11:50:39+00:00","og_image":[{"width":1400,"height":800,"url":"https:\/\/kabisa.nl\/wp-content\/uploads\/2023\/07\/kabisa-java.jpg","type":"image\/jpeg"}],"author":"Daan de Rond","twitter_misc":{"Written by":"Daan de Rond","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/#article","isPartOf":{"@id":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/"},"author":{"name":"Daan de Rond","@id":"https:\/\/kabisa.nl\/en\/#\/schema\/person\/1092a65519796d6d607cfba4dc564603"},"headline":"Catching common Java mistakes with Error Prone","datePublished":"2023-07-28T11:24:08+00:00","dateModified":"2023-10-14T11:50:39+00:00","mainEntityOfPage":{"@id":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/"},"wordCount":718,"commentCount":0,"publisher":{"@id":"https:\/\/kabisa.nl\/en\/#organization"},"image":{"@id":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/#primaryimage"},"thumbnailUrl":"https:\/\/kabisa.nl\/wp-content\/uploads\/2023\/07\/kabisa-java.jpg","articleSection":["Tech blog"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/","url":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/","name":"Catching common Java mistakes with Error Prone | Kabisa Software Artisans","isPartOf":{"@id":"https:\/\/kabisa.nl\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/#primaryimage"},"image":{"@id":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/#primaryimage"},"thumbnailUrl":"https:\/\/kabisa.nl\/wp-content\/uploads\/2023\/07\/kabisa-java.jpg","datePublished":"2023-07-28T11:24:08+00:00","dateModified":"2023-10-14T11:50:39+00:00","description":"Last month a few colleagues and I went to J-SPRING in Utrecht. We were really intrigued by a talk about\u00a0Error Prone\u00a0by Rick Ossendrijver and decided to","breadcrumb":{"@id":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/#primaryimage","url":"https:\/\/kabisa.nl\/wp-content\/uploads\/2023\/07\/kabisa-java.jpg","contentUrl":"https:\/\/kabisa.nl\/wp-content\/uploads\/2023\/07\/kabisa-java.jpg","width":1400,"height":800},{"@type":"BreadcrumbList","@id":"https:\/\/kabisa.nl\/en\/tech\/catching-common-java-mistakes-with-error-prone\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kabisa.nl\/en\/"},{"@type":"ListItem","position":2,"name":"Tech blog","item":"https:\/\/kabisa.nl\/en\/tech\/"},{"@type":"ListItem","position":3,"name":"Catching common Java mistakes with Error Prone"}]},{"@type":"WebSite","@id":"https:\/\/kabisa.nl\/en\/#website","url":"https:\/\/kabisa.nl\/en\/","name":"Kabisa Software Artisans","description":"Mission-critical Software for Hightech, Fintech &amp; E-commerce","publisher":{"@id":"https:\/\/kabisa.nl\/en\/#organization"},"alternateName":"Kabisa","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kabisa.nl\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/kabisa.nl\/en\/#organization","name":"Cloud Legends","alternateName":"Kabisa","url":"https:\/\/kabisa.nl\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/kabisa.nl\/en\/#\/schema\/logo\/image\/","url":"https:\/\/kabisa.nl\/wp-content\/uploads\/2022\/12\/kabisa-favicon.png","contentUrl":"https:\/\/kabisa.nl\/wp-content\/uploads\/2022\/12\/kabisa-favicon.png","width":512,"height":512,"caption":"Cloud Legends"},"image":{"@id":"https:\/\/kabisa.nl\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kabisaict","https:\/\/x.com\/kabisasoftware"],"description":"Software Development is onze core-business. Kabisa ontwikkelt innovatieve maatwerk software die naadloos aansluit bij de behoeftes van klanten en eindgebruikers. Dat doen we in nauwe samenwerking in elke fase van het proces: co-creatie noemen we dat.","email":"info@kabisa.nl","telephone":"0495 430 798","legalName":"Kabisa B.V.","foundingDate":"2006-01-01","numberOfEmployees":{"@type":"QuantitativeValue","minValue":"51","maxValue":"200"}},{"@type":"Person","@id":"https:\/\/kabisa.nl\/en\/#\/schema\/person\/1092a65519796d6d607cfba4dc564603","name":"Daan de Rond","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/3ba8a03cef12cd0c8c890f28258923334bc7c767b1faae73ca70e492da46a7ed?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/3ba8a03cef12cd0c8c890f28258923334bc7c767b1faae73ca70e492da46a7ed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/3ba8a03cef12cd0c8c890f28258923334bc7c767b1faae73ca70e492da46a7ed?s=96&d=mm&r=g","caption":"Daan de Rond"}}]}},"_links":{"self":[{"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/posts\/6169","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/comments?post=6169"}],"version-history":[{"count":7,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/posts\/6169\/revisions"}],"predecessor-version":[{"id":6176,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/posts\/6169\/revisions\/6176"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/media\/6179"}],"wp:attachment":[{"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/media?parent=6169"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/categories?post=6169"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kabisa.nl\/en\/wp-json\/wp\/v2\/tags?post=6169"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}