Search code examples
springgrailsgroovygrails-2.0grails-controller

How to Change Controller Name and function name URL in Grails 2.2.2?


I am trying to change my controller name and method name in grails

e.g :abc.com/newUser/viewUser/4

i want to convert in below format e.g :abc.com/new-user/view-user/4

Or

e.g :abc.com/new_user/view_user/4

for that i wrote a code :

package customize

import grails.web.UrlConverter

import org.apache.commons.lang.StringUtils

class CustomUrlConverter implements UrlConverter {

    private static final String GRAILS_EXTENSION = '_'

    String toUrlElement(String propertyOrClassName) {

        if (StringUtils.isBlank(propertyOrClassName)) {

            return propertyOrClassName

        } else {

            String[] r =    propertyOrClassName.split("(?=\\p{Upper})");
            String lowerPropertyOrClassName = propertyOrClassName.toLowerCase();
            println r.length + "size()";
            String extendedPropertyOrClassName="";
            if(r.length > 1){
                for(int i=0; i < r.length;i++){
                    extendedPropertyOrClassName = extendedPropertyOrClassName + r[i].toLowerCase()
                    if(i+1 <  r.length ){
                    extendedPropertyOrClassName =addGrailsExtension(extendedPropertyOrClassName);
                    }
                }
            }else{
                extendedPropertyOrClassName =  propertyOrClassName.toLowerCase()
            }
            return extendedPropertyOrClassName

        }
    }



    private String addGrailsExtension(String propertyOrClassName) {

        if (propertyOrClassName.endsWith(GRAILS_EXTENSION)) {

            return propertyOrClassName

        } else {

            return propertyOrClassName + GRAILS_EXTENSION

        }

    }
}

In Config.groovy

grails.web.url.converter = 'hyphenated'

// grails-app/conf/spring/resources.groovy

beans = {
    "${grails.web.UrlConverter.BEAN_NAME}"(com.myapplication.MyUrlConverterImpl)
}

In this when i am trying to get all character in small letter like below Url

e.g :abc.com/newuser/viewuser/4

its working fine

But when i add underscore in between two character like below Url

e.g :abc.com/new_user/view_user/4

Its gives an error 404.. Please Help me out. If you have any other option to change URL also welcome..

Thank you


Solution

  • One of the easiest way to achieve your requirement is UrlMappings.groovy

    "/new_user/view_user/$id"(controller: 'newUser', action: 'viewUser')