Почему у меня такое неправильное поведение, когда я передаю адрес электронной почты в качестве значения переменной пути Spring MVC?

Я обнаружил некоторые трудности с этим конкретным случаем использования переменной пути в Spring MVC.

Итак, я открываю URL-адрес следующим образом:

localhost:8080/my-project/utenze/my.username/confermaEmail/[email protected]

В моем классе контроллера у меня есть этот метод контроллера, который обрабатывает URL-адрес следующим образом:

@RequestMapping(value = "utenze/{username}/confermaEmail/{email}", method = RequestMethod.GET)
    public String confermaModificaEmail(@RequestHeader(value = HEADER_USER_CG) String codicefiscale, 
                                        @PathVariable String username, @PathVariable String email, Model model)  {

        logger.info("INTO confermaModificaEmail(), indirizzo e-mail: " + email);

        ...................................................................
        ...................................................................
        ...................................................................

        return "myView";
}

Предыдущий запрос обработан правильно, но у меня возникла следующая проблема со значением переменной пути email.

Проблема в том, что значение переменной пути email не [email protected], как я ожидал, а my.emai@google. .

Spring автоматически удаляет последний раздел .com вставленного значения.

Почему? В чем проблема? Что мне не хватает? Как я могу попытаться решить эту проблему?


person AndreaNobili    schedule 29.04.2016    source источник
comment
быстрый способ решить эту проблему: создать метод (например, emailFixer) и проверить электронную почту (параметр метода) с наличием .com в конце электронной почты, и если ее там не было, добавьте ее и верните.   -  person Mohammadreza Khatami    schedule 29.04.2016
comment
См. stackoverflow.com/a/34164388/2696260.   -  person M. Deinum    schedule 29.04.2016


Ответы (1)


В вашем случае я бы удалил {email} из переменной пути и запросил ее через параметр запроса:

@RequestMapping(value = "utenze/{username}/confermaEmail", method = RequestMethod.GET)
public String confermaModificaEmail(@RequestHeader(value = HEADER_USER_CG) String codicefiscale, 
                                    @PathVariable String username, @RequestParam(value="email", required=true) String email, Model model)  {

    logger.info("INTO confermaModificaEmail(), indirizzo e-mail: " + email);

    ...................................................................
    ...................................................................
    ...................................................................

    return "myView";}

Попробуй это =)

person Roel Strolenberg    schedule 29.04.2016
comment
Это не решение для меня, потому что я должен использовать этот URL-адрес, который не использует параметр для значения электронной почты. - person AndreaNobili; 29.04.2016
comment
Это также не удастся для username, потому что имя пользователя также содержит точку. - person Slava Semushin; 29.04.2016
comment
Рекомендуется использовать этот метод, а не отправлять его как переменную пути. - person We are Borg; 29.04.2016