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
One of the easiest way to achieve your requirement is UrlMappings.groovy
"/new_user/view_user/$id"(controller: 'newUser', action: 'viewUser')