Spring MVC @PathVariable с ошибкой выдачи URL-адреса

есть ли способ отправить параметр типа "https://jira.springsource.org/browse/SPR-6164 "в @PathVariable как часть пути URI... в Spring Web MVC

@RequestMapping(value = "/Details/{Emailaddress}/{URL}", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    public @ResponseBody Status Details(@PathVariable("Emailaddress") String Emailaddress,
             @PathVariable("URL") String URL) {
try {
            bankingData.callingmethod(Emailaddress,URL);
            return new Status(1, "Details added !");
        } catch (Exception e) {
            // e.printStackTrace();
            return new Status(0, e.toString());
        }
    }

ошибка: запрошенный ресурс недоступен


person dafodil    schedule 01.02.2016    source источник
comment
Используется ли {URL} для идентификации ресурса, с которым вы собираетесь работать? Если нет, {URL} следует принимать как параметр запроса, а не как переменную пути. В любом случае вы все равно можете отправить URL-адрес http в качестве параметра запроса или переменной пути, закодировав часть URL-адреса.   -  person Fahim Farook    schedule 01.02.2016
comment
попробуйте опубликовать полный метод   -  person Abdelhak    schedule 01.02.2016
comment
@Fahim Farook, кодирующий часть URL-адреса, должен выполняться только на стороне клиента, или я могу сделать это и на стороне сервера?   -  person dafodil    schedule 01.02.2016
comment
@Abdelhak, пожалуйста, проверьте измененный опубликованный код   -  person dafodil    schedule 01.02.2016
comment
Можете ли вы опубликовать URL-адрес, который вы используете?   -  person Abdelhak    schedule 01.02.2016
comment
@Abdelhak http://123.343.2.12:8080/services/Details/[email protected]/http://`567.322.2.23/ddfdfdfdf   -  person dafodil    schedule 01.02.2016
comment
попробуйте обновленный ответ   -  person Abdelhak    schedule 01.02.2016
comment
Я бы рекомендовал добавлять адреса электронной почты не как переменную Path, а как параметры RequestBody. Вы можете кодировать в JS из внешнего интерфейса, а затем отправлять его в методы контроллера. Проверьте кодировку URL-адресов в JS или любой внешней среде, которую вы используете в настоящее время.   -  person We are Borg    schedule 01.02.2016
comment
Кодирование URL является задачей клиента. Когда запрос достигает метода остальных ресурсов, он уже находится в декодированном виде, и вам не нужно его программно декодировать.   -  person Fahim Farook    schedule 02.02.2016


Ответы (2)


Это так, но вы должны правильно закодировать его. Используйте URLEncoder.encode() для этого:

String url = 
    "http://server/Details/"+URLEncoder.encode("http://myserver/mypath/to/url/", "UTF-8");

Этот код должен выполняться на стороне клиента при создании URL-адреса. Кодировка должна применяться как к элементам pat, так и к параметрам запроса.

person Zbynek Vyskovsky - kvr000    schedule 01.02.2016
comment
не могли бы вы объяснить мне, где я должен кодировать или помещать код выше в моем контексте? - person dafodil; 01.02.2016

Попробуйте написать url как {URL:.+} в своем методе следующим образом:

   @RequestMapping(value = "/Details/{Emailaddress}/{URL:.+}", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE)
    public Status Details(@PathVariable("Emailaddress") String Emailaddress,
         @PathVariable("URL") String URL) {

Параметр запроса с точкой . усекается.

person Abdelhak    schedule 01.02.2016
comment
http://123.343.2.12:8080/services/Details/[email protected]/http://sasasas не работает после того, как вы посоветовали. та же ошибка - person dafodil; 01.02.2016