{"id":2478,"date":"2010-12-27T15:38:07","date_gmt":"2010-12-27T10:08:07","guid":{"rendered":"https:\/\/2thenew.today\/blog\/?p=2478"},"modified":"2016-12-19T15:04:09","modified_gmt":"2016-12-19T09:34:09","slug":"request-mocking-to-use-groovypagestemplateengine-in-backend-threads","status":"publish","type":"post","link":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/","title":{"rendered":"Request Mocking to use groovyPagesTemplateEngine in backend threads"},"content":{"rendered":"<p>We have a setup where a backend thread, fired by the Spring Events, does some processing, generates a PDF and emails the result to the user.<br \/>\nThe code we were using to generate the HTML from a GSP to be converted to a PDF using iText was as follows :<\/p>\n<p>[java]<br \/>\n        def webRequest = RequestContextHolder.getRequestAttributes()<br \/>\n        def originalOut = webRequest.out<br \/>\n        try {<br \/>\n            def sw = new StringWriter()<br \/>\n            def pw = new PrintWriter(sw)<br \/>\n            webRequest.out = pw<br \/>\n            groovyPagesTemplateEngine.createTemplate(&amp;quot;path_to_gsp&amp;quot;).make([model:model]).writeTo(pw)<br \/>\n            return sw.toString()<br \/>\n        } finally {<br \/>\n          webRequest.out = originalOut<br \/>\n        }<br \/>\n[\/java]<\/p>\n<p>There was the obvious fallibility of this code that there was no Current Request associated with the backend thread!<\/p>\n<p>After doing some googling around it, I came across a few threads and posts which talked about Request Mocking, which has been used in Grails Template Engine Plugin. \u00a0We overcame this by using the code snippet given below to mock the web request<\/p>\n<p>[java]<br \/>\ndef webRequest = RequestContextHolder.getRequestAttributes()<br \/>\nif(!webRequest) {<br \/>\n          def servletContext \u00a0= ServletContextHolder.getServletContext()<br \/>\n          def applicationContext = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext)<br \/>\n          webRequest = grails.util.GrailsWebUtil.bindMockWebRequest(applicationContext)<br \/>\n}<br \/>\n[\/java]<\/p>\n<p>However, things didn&#8217;t end there. This code broke while working on a WAR environment. The problem was that the MockWebRequest class was part of the &#8220;org.springframework:org.springframework.test:3.0.3.RELEASE&#8221; jar and had to be included in the BuildConfig.groovy as<\/p>\n<p>[java]<\/p>\n<p>dependencies{<\/p>\n<p>runtime &#8216;org.springframework:org.springframework.test:3.0.3.RELEASE&#8217;<\/p>\n<p>}<\/p>\n<p>[\/java]<\/p>\n<p>Ensure that the line<\/p>\n<p>[java]<\/p>\n<p>mavenCentral()<\/p>\n<p>[\/java]<\/p>\n<p>is <span style=\"color: #ff0000;\">not commented<\/span> in BuildConfig.groovy<\/p>\n<p>We were working on Grails 1.3.4<\/p>\n<p>&nbsp;<\/p>\n<p>Hope this helps.<br \/>\nVivek<\/p>\n","protected":false},"excerpt":{"rendered":"<p>We have a setup where a backend thread, fired by the Spring Events, does some processing, generates a PDF and emails the result to the user. The code we were using to generate the HTML from a GSP to be converted to a PDF using iText was as follows : [java] def webRequest = RequestContextHolder.getRequestAttributes() [&hellip;]<\/p>\n","protected":false},"author":10,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":5,"footnotes":""},"categories":[7],"tags":[4840,9,32,292,4841,484],"class_list":["post-2478","post","type-post","status-publish","format-standard","hentry","category-grails","tag-grails","tag-groovy","tag-gsp","tag-pdf","tag-spring","tag-web-request-mocking"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.0.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"We have a setup where a backend thread, fired by the Spring Events, does some processing, generates a PDF and emails the result to the user. The code we were using to generate the HTML from a GSP to be converted to a PDF using iText was as follows : [java] def webRequest = RequestContextHolder.getRequestAttributes()\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Vivek Krishna\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.0.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"TO THE NEW BLOG\" \/>\n\t\t<meta property=\"og:type\" content=\"blog\" \/>\n\t\t<meta property=\"og:title\" content=\"Request Mocking to use groovyPagesTemplateEngine in backend threads | TO THE NEW Blog\" \/>\n\t\t<meta property=\"og:description\" content=\"We have a setup where a backend thread, fired by the Spring Events, does some processing, generates a PDF and emails the result to the user. The code we were using to generate the HTML from a GSP to be converted to a PDF using iText was as follows : [java] def webRequest = RequestContextHolder.getRequestAttributes()\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@tothenew\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Request Mocking to use groovyPagesTemplateEngine in backend threads | TO THE NEW Blog\" \/>\n\t\t<meta name=\"twitter:description\" content=\"We have a setup where a backend thread, fired by the Spring Events, does some processing, generates a PDF and emails the result to the user. The code we were using to generate the HTML from a GSP to be converted to a PDF using iText was as follows : [java] def webRequest = RequestContextHolder.getRequestAttributes()\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\\\/#article\",\"name\":\"Request Mocking to use groovyPagesTemplateEngine in backend threads | TO THE NEW Blog\",\"headline\":\"Request Mocking to use groovyPagesTemplateEngine in backend threads\",\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/vivek\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"},\"datePublished\":\"2010-12-27T15:38:07+05:30\",\"dateModified\":\"2016-12-19T15:04:09+05:30\",\"inLanguage\":\"en-US\",\"commentCount\":5,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\\\/#webpage\"},\"articleSection\":\"Grails, Grails, Groovy, gsp, pdf, Spring, web request mocking\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"position\":2,\"name\":\"Grails\",\"item\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\\\/#listItem\",\"name\":\"Request Mocking to use groovyPagesTemplateEngine in backend threads\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\\\/#listItem\",\"position\":3,\"name\":\"Request Mocking to use groovyPagesTemplateEngine in backend threads\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/category\\\/grails\\\/#listItem\",\"name\":\"Grails\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\",\"name\":\"TO THE NEW Blog\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/vivek\\\/#author\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/vivek\\\/\",\"name\":\"Vivek Krishna\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/07dba643a97b00215bacf46343f18d6cb7ab45f777264e13c22deb54f2cc830b?s=96&d=mm&r=g\",\"width\":96,\"height\":96,\"caption\":\"Vivek Krishna\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\\\/#webpage\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\\\/\",\"name\":\"Request Mocking to use groovyPagesTemplateEngine in backend threads | TO THE NEW Blog\",\"description\":\"We have a setup where a backend thread, fired by the Spring Events, does some processing, generates a PDF and emails the result to the user. The code we were using to generate the HTML from a GSP to be converted to a PDF using iText was as follows : [java] def webRequest = RequestContextHolder.getRequestAttributes()\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/vivek\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/author\\\/vivek\\\/#author\"},\"datePublished\":\"2010-12-27T15:38:07+05:30\",\"dateModified\":\"2016-12-19T15:04:09+05:30\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/\",\"name\":\"TO THE NEW Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.tothenew.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"Request Mocking to use groovyPagesTemplateEngine in backend threads | TO THE NEW Blog","description":"We have a setup where a backend thread, fired by the Spring Events, does some processing, generates a PDF and emails the result to the user. The code we were using to generate the HTML from a GSP to be converted to a PDF using iText was as follows : [java] def webRequest = RequestContextHolder.getRequestAttributes()","canonical_url":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/#article","name":"Request Mocking to use groovyPagesTemplateEngine in backend threads | TO THE NEW Blog","headline":"Request Mocking to use groovyPagesTemplateEngine in backend threads","author":{"@id":"https:\/\/2thenew.today\/blog\/author\/vivek\/#author"},"publisher":{"@id":"https:\/\/2thenew.today\/blog\/#organization"},"datePublished":"2010-12-27T15:38:07+05:30","dateModified":"2016-12-19T15:04:09+05:30","inLanguage":"en-US","commentCount":5,"mainEntityOfPage":{"@id":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/#webpage"},"isPartOf":{"@id":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/#webpage"},"articleSection":"Grails, Grails, Groovy, gsp, pdf, Spring, web request mocking"},{"@type":"BreadcrumbList","@id":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog#listItem","position":1,"name":"Home","item":"https:\/\/2thenew.today\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/category\/grails\/#listItem","name":"Grails"}},{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/category\/grails\/#listItem","position":2,"name":"Grails","item":"https:\/\/2thenew.today\/blog\/category\/grails\/","nextItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/#listItem","name":"Request Mocking to use groovyPagesTemplateEngine in backend threads"},"previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/#listItem","position":3,"name":"Request Mocking to use groovyPagesTemplateEngine in backend threads","previousItem":{"@type":"ListItem","@id":"https:\/\/2thenew.today\/blog\/category\/grails\/#listItem","name":"Grails"}}]},{"@type":"Organization","@id":"https:\/\/2thenew.today\/blog\/#organization","name":"TO THE NEW Blog","url":"https:\/\/2thenew.today\/blog\/"},{"@type":"Person","@id":"https:\/\/2thenew.today\/blog\/author\/vivek\/#author","url":"https:\/\/2thenew.today\/blog\/author\/vivek\/","name":"Vivek Krishna","image":{"@type":"ImageObject","@id":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/07dba643a97b00215bacf46343f18d6cb7ab45f777264e13c22deb54f2cc830b?s=96&d=mm&r=g","width":96,"height":96,"caption":"Vivek Krishna"}},{"@type":"WebPage","@id":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/#webpage","url":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/","name":"Request Mocking to use groovyPagesTemplateEngine in backend threads | TO THE NEW Blog","description":"We have a setup where a backend thread, fired by the Spring Events, does some processing, generates a PDF and emails the result to the user. The code we were using to generate the HTML from a GSP to be converted to a PDF using iText was as follows : [java] def webRequest = RequestContextHolder.getRequestAttributes()","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/2thenew.today\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/#breadcrumblist"},"author":{"@id":"https:\/\/2thenew.today\/blog\/author\/vivek\/#author"},"creator":{"@id":"https:\/\/2thenew.today\/blog\/author\/vivek\/#author"},"datePublished":"2010-12-27T15:38:07+05:30","dateModified":"2016-12-19T15:04:09+05:30"},{"@type":"WebSite","@id":"https:\/\/2thenew.today\/blog\/#website","url":"https:\/\/2thenew.today\/blog\/","name":"TO THE NEW Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/2thenew.today\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"TO THE NEW BLOG","og:type":"blog","og:title":"Request Mocking to use groovyPagesTemplateEngine in backend threads | TO THE NEW Blog","og:description":"We have a setup where a backend thread, fired by the Spring Events, does some processing, generates a PDF and emails the result to the user. The code we were using to generate the HTML from a GSP to be converted to a PDF using iText was as follows : [java] def webRequest = RequestContextHolder.getRequestAttributes()","og:url":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/","og:image":"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","og:image:secure_url":"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png","twitter:card":"summary","twitter:site":"@tothenew","twitter:title":"Request Mocking to use groovyPagesTemplateEngine in backend threads | TO THE NEW Blog","twitter:description":"We have a setup where a backend thread, fired by the Spring Events, does some processing, generates a PDF and emails the result to the user. The code we were using to generate the HTML from a GSP to be converted to a PDF using iText was as follows : [java] def webRequest = RequestContextHolder.getRequestAttributes()","twitter:image":"https:\/\/2thenew.today\/blog\/wp-content\/themes\/ttn\/images\/social-logo.png"},"aioseo_meta_data":{"post_id":"2478","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"Article","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"limit_modified_date":false,"created":"2021-04-30 08:15:01","updated":"2024-02-29 11:00:21","focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"ai":null,"breadcrumb_settings":null,"seo_analyzer_scan_date":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.today\/blog\" title=\"Home\">Home<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\t<a href=\"https:\/\/2thenew.today\/blog\/category\/grails\/\" title=\"Grails\">Grails<\/a>\n\t\t<\/span><span class=\"aioseo-breadcrumb-separator\">&raquo;<\/span><span class=\"aioseo-breadcrumb\">\n\t\t\tRequest Mocking to use groovyPagesTemplateEngine in backend threads\n\t\t<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/2thenew.today\/blog"},{"label":"Grails","link":"https:\/\/2thenew.today\/blog\/category\/grails\/"},{"label":"Request Mocking to use groovyPagesTemplateEngine in backend threads","link":"https:\/\/2thenew.today\/blog\/request-mocking-to-use-groovypagestemplateengine-in-backend-threads\/"}],"_links":{"self":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/posts\/2478","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/comments?post=2478"}],"version-history":[{"count":0,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/posts\/2478\/revisions"}],"wp:attachment":[{"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/media?parent=2478"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/categories?post=2478"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/2thenew.today\/blog\/wp-json\/wp\/v2\/tags?post=2478"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}