{"id":29,"date":"2009-04-03T13:37:59","date_gmt":"2009-04-03T08:07:59","guid":{"rendered":"http:\/\/www.tothenew.com\/blog\/?p=29"},"modified":"2016-12-19T15:28:29","modified_gmt":"2016-12-19T09:58:29","slug":"restricting-all-urls-to-end-with-html-in-a-grails-application","status":"publish","type":"post","link":"https:\/\/www.tothenew.com\/blog\/restricting-all-urls-to-end-with-html-in-a-grails-application\/","title":{"rendered":"Restricting all URLs to end with .html in a Grails Application"},"content":{"rendered":"<p>While going through the grails-users mailing list, I found a question about restricting all URLs to end with &#8216;.html&#8217; &amp; returning Error 404 for the default mappings. After spending some time, I was able to build a sample CRUD application  restricting URLs to end with .html.<\/p>\n<p>I did the following steps for the same:<\/p>\n<p>1. Create a new grails application with name &#8216;Urlmapping&#8217;: <code>grails create-app Urlmapping<\/code><br \/>\n2. Create domain class Urltest: <code>grails create-domain-class Urltest<\/code><br \/>\n3. Add a String variable &#8216;test&#8217; in domain class Urltest:<\/p>\n<pre lang=\"groovy\">\r\nclass Urltest {\r\n    String test\r\n    static constraints = {\r\n    }\r\n}<\/pre>\n<p>4. Generate controllers &amp; views for Urltest: <code>grails generate-all Urltest<\/code><br \/>\n5. Changed the UrlMappings in UrlMappings.groovy:<\/p>\n<pre lang=\"groovy\">\r\nclass UrlMappings {\r\n    static mappings = {\r\n        \"\/$controller\/$action\/$id.$suffix\"\r\n        {\r\n            constraints {\r\n                suffix(matches: 'html')\r\n            }\r\n        }\r\n        \"\/$controller\/$action.$suffix\"\r\n        {\r\n            constraints {\r\n                suffix(matches: 'html')\r\n            }\r\n        }\r\n        \"\/\"(view: \"\/index\")\r\n        \"500\"(view: '\/error')\r\n    }\r\n}<\/pre>\n<p>6. Removed the Entry &#8220;<code>html: ['text\/html','application\/xhtml+xml'],<\/code>&#8221; from map <code>grails.mime.type<\/code> in Config.groovy<\/p>\n<p>7. Created initial data in BootStrap.groovy:<\/p>\n<pre lang=\"groovy\">\r\nclass BootStrap {\r\n    def init = {\r\n        servletContext - &amp; gt;\r\n        Urltest urltest\r\n        (1..5).each {\r\n            urltest = new Urltest(test: 'Test-' + it)\r\n            urltest.save()\r\n        }\r\n    }\r\n    def destroy = {\r\n    }\r\n}<\/pre>\n<p>Run the application: <code>grails run-app<\/code><\/p>\n<p>Now, I had to use following urls for CRUD functionality:<\/p>\n<p># <code>http:\/\/localhost:8080\/mailing\/urltest\/index.html<\/code><br \/>\n# <code>http:\/\/localhost:8080\/mailing\/urltest\/list.html<\/code><br \/>\n# <code>http:\/\/localhost:8080\/mailing\/urltest\/create.html<\/code><br \/>\n# <code>http:\/\/localhost:8080\/mailing\/urltest\/show\/1.html<\/code><br \/>\n# <code>http:\/\/localhost:8080\/mailing\/urltest\/edit\/1.html<\/code><\/p>\n<p>(Scaffolding generated links <code>http:\/\/localhost:8080\/mailing\/urltest\/index<\/code>, <code>http:\/\/localhost:8080\/mailing\/urltest\/edit\/1<\/code> &amp; <code>http:\/\/localhost:8080\/mailing\/urltest\/show\/1<\/code> etc. won&#8217;t work since default associated UrlMapping <code>\"\/$controller\/$action\/$id?\"<\/code> has been removed from UrlMappings.groovy)<\/p>\n<p>To convert the links into desired format, you needs to pass suffix=&#8217;html&#8217; as params to g:link &amp; g:form tags on all views &amp; redirects in Controller.<\/p>\n<p>I have attached the source code for reference.<\/p>\n<p>This was my first attempt for editing default Url mappings. I am sure I will be able to find better &amp; less tedious ways of doing the same over a period of time.<\/p>\n<p>Also, I would like to mention that I found broken links generated by g:paginate tag.<br \/>\nA JIRA issue exists for the same.<\/p>\n<p>&#8212;<br \/>\n~Aman Aggarwal<br \/>\naman@intelligrape.com<\/p>\n<p><a href=\"http:\/\/www.tothenew.com\/blog\/\">http:\/\/www.IntelliGrape.com\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>While going through the grails-users mailing list, I found a question about restricting all URLs to end with &#8216;.html&#8217; &amp; returning Error 404 for the default mappings. After spending some time, I was able to build a sample CRUD application restricting URLs to end with .html. I did the following steps for the same: 1. [&hellip;]<\/p>\n","protected":false},"author":282,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"iawp_total_views":0},"categories":[7],"tags":[4840,9,4842,51,50,53],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/29"}],"collection":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/users\/282"}],"replies":[{"embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/comments?post=29"}],"version-history":[{"count":0,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/posts\/29\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/media?parent=29"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/categories?post=29"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.tothenew.com\/blog\/wp-json\/wp\/v2\/tags?post=29"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}