Как изменить имя контроллера и URL-адрес имени функции в Grails 2.2.2?

Я пытаюсь изменить имя моего контроллера и имя метода в Grails

например: abc.com/newUser/viewUser/4

я хочу конвертировать в формат ниже например: abc.com/new-user/view-user/4

Or

например: abc.com/new_user/view_user/4

для этого я написал код:

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

        }

    }
}

В Config.groovy

grails.web.url.converter = 'hyphenated'

// приложение Grails/conf/spring/resources.groovy

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

В этом, когда я пытаюсь получить все символы строчными буквами, как показано ниже Url

например: abc.com/newuser/viewuser/4

работает нормально

Но когда я добавляю подчеркивание между двумя символами, как показано ниже Url

например: abc.com/new_user/view_user/4

Выдает ошибку 404. Пожалуйста, помогите мне. Если у вас есть другой вариант изменить URL, также добро пожаловать.

Спасибо


person SAGAR MANE    schedule 18.08.2014    source источник


Ответы (1)


Один из самых простых способов выполнить ваше требование — UrlMappings.groovy

"/new_user/view_user/$id"(controller: 'newUser', action: 'viewUser')
person MKB    schedule 18.08.2014
comment
Спасибо большое .. вы спасли меня :) - person SAGAR MANE; 18.08.2014
comment
/new_user/view_user?/$id?(.${format})? - Почему вам нужен вопросительный знак после view_user, или это опечатка? - person Jeff Scott Brown; 18.08.2014
comment
@JeffScottBrown — я взял этот синтаксис с grails.org /doc/latest/ref/Plug-ins/URL%20mappings.html, ? после имени действия. Я также пробовал без ?, и это работает. Какой рекомендуемый способ? Пожалуйста, предложите. - person MKB; 18.08.2014
comment
Я взял этот синтаксис с grails.org/doc/latest/ref/Plug-ins/URL%20mappings.html, ? после названия действия. - Вы не использовали вопросительный знак после имени действия. Вы использовали вопросительный знак за строковым литералом в своем сопоставлении. Я не уверен, какой эффект, по вашему мнению, имеет вопросительный знак в контексте, в котором вы его использовали, но я не думаю, что есть какая-то причина включать здесь вопросительный знак. Знак вопроса полезен только за именами переменных в отображении. - person Jeff Scott Brown; 18.08.2014
comment
Я также не уверен, что за id должен стоять вопросительный знак для этого конкретного типа сопоставления. Не имеет смысла запрашивать просмотр пользователя и не указывать идентификатор. Поскольку это сопоставление предназначено специально для просмотра пользователя, вероятно, имеет смысл указать обязательный, а не необязательный идентификатор. Знак вопроса делает его необязательным. - person Jeff Scott Brown; 18.08.2014
comment
Почему бы /new_user/view_user/$id(.${format})?(контроллер: 'newUser', действие: 'viewUser') или /new_user/view_user/$id(контроллер: 'newUser', действие: ' viewUser') (в зависимости от требований) имеет больше смысла? - person Jeff Scott Brown; 18.08.2014
comment
@JeffScottBrown - Спасибо за ответ и предоставление этой ценной информации. Обновлю мой ответ. - person MKB; 18.08.2014
comment
fwiw... Я думаю, что безответственно отвечать на вопросы людей, используя примеры кода, которые вы не понимаете. - person Jeff Scott Brown; 18.08.2014
comment
@JeffScottBrown - Да, ты прав. Я сожалею об этом. Но если бы я не поделился, то я бы не получил эту ценную информацию. Я учусь на другом ответе и на своих ошибках. - person MKB; 18.08.2014
comment
как сопоставить, например, abc.com/newuser/viewuser/4?index=1 такой URL??? @user1690588 - person SAGAR MANE; 19.08.2014
comment
@SAGARMANE - Попробуйте добавить ? после идентификатора, например /new_user/view_user/$id(.${format})? - person MKB; 19.08.2014
comment
@ user1690588: решено .. /new_user/view_user/$id/${format}? с этим форматом - person SAGAR MANE; 19.08.2014
comment
@user1690588 user1690588: как поступить с методом post - person SAGAR MANE; 19.08.2014
comment
@SAGARMANE – посмотрите: grails.org/doc/latest/guide /single.html#urlmappings - person MKB; 19.08.2014