Контроллер Java Spring обрабатывает нелепый URL

Хорошо, я использую платежный сервис под названием Thrive cart, я делаю это для созданного мной веб-сайта членства. Когда пользователь заплатил, я хочу, чтобы он был перенаправлен на URL-адрес, где я могу использовать эти данные для обновления информации о текущих пользователях.

Данные, которые отправляются в параметрах, безумны:

http: // localhost: 5000 / user / welcome? thrivecart% 5Baccount_id% 5D = 3196 & thrivecart% 5Baccount_name% 5D = testacount & thrivecart% 5Bcustomer% 5D% 5Bemail% 5D = testname8% 40gmail.com & thrivecart% 5Bcustomer% 5DDress% 5D 5D = GB & thrivecart% 5Bcustomer% 5D% 5Baddress% 5D% 5Bzip% 5D = pe303wu & thrivecart% 5Border% 5D% 5B0% 5D% 5Bt% 5D = product & thrivecart% 5Border% 5D%% 5B0% 5D% 5Bidder% 5 5B0% 5D% 5Bn% 5D = Ежемесячно + членство и thrivecart% 5Border% 5D% 5B0% 5D% 5Bp% 5D = 799 & thrivecart% 5Border% 5D% 5B0% 5D% 5Bq% 5D = 1 & thrivecart% 5Border% 5D% 5B0% 5Border% 5D% 5B0% 5 5D = 60120 & thrivecart% 5Border% 5D% 5B1% 5D% 5Bt% 5D = product & thrivecart% 5Border% 5D% 5B1% 5D% 5Bid% 5D = 6 & thrivecart% 5Border% 5D% 5B1% 5D% 5Bn% 5D = Monthly + 5D% 5B1% 5D% 5Bp% 5D = 799 & thrivecart% 5Border% 5D% 5B1% 5D% 5Bq% 5D = 1 & thrivecart% 5Border% 5D% 5B1% 5D% 5Bpo% 5D = 60120 & thrivecart% 5Border GBPBidCurrency% 5Drive_currency% 5Border_currency% 5D 1041278 & thrivecart% 5Border_tax% 5D = 0.2 & thrivecart% 5Border_tax_id% 5D = gb & thrivecart% 5Border_total% 5D = 799 & thrivecart% 5Bpayment_processor% 5D = PayPal & Thriv ecart% 5Bproduct_id% 5D = 6 & thrivecart% 5Bpurchases% 5D% 5B0% 5D = 6 & thrivecart% 5Bpurchases% 5D% 5B1% 5D = 6 & thrivecart_hash = a5b711d2288b4cb587511811bc0a3473

Пока что я установил простой контроллер, который не работает:

@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping(value = "/welcome", method = RequestMethod.POST)
    public void welcomeMember(@PathVariable String data) {

        System.out.println(data);
    }   
}

Как мне справиться с такими сумасшедшими данными? Должен ли я указывать каждый параметр пути?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
33
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Это похоже на проблему с тем, как остальные api вызываются со стороны потребителя службы.

попробуйте отправить данные в теле запроса, а не как параметр. Таким образом, вы можете использовать POJO для обработки данных.

Ответ принят как подходящий

Прежде всего, вы получаете не элементы пути, а параметры запроса, поэтому для получения значений вам потребуются аннотации @RequestParam.

Поскольку параметров запроса очень много, я бы также рекомендовал взять только один параметр - Map<String, String>. Эта карта будет содержать все параметры в виде пар ключ / значение, например:

  • ключ: "thrivecart [account_id]"
  • значение: "3196"

Если вы не уверены, получаете ли вы запрос POST или GET, вы также можете добавить второй параметр для получения HttpMethod.

Измените свой RestController на:

@RestController
@RequestMapping("/user")
public class UserController {
    @RequestMapping(value = "/welcome")
    public void welcomeMember(@RequestParam Map<String, String> data, HttpMethod method) {
        System.out.println(method);
        System.out.println(data);
    }   
}

@ user3667111, возможно, вы не получаете запрос POST, а запрос GET. Я обновил пример кода, чтобы он работал как с POST, так и с GET.

Thomas Kläger 27.10.2018 16:13

Question 1:Пока что я установил простой контроллер, который не работает:

Согласно вашему URL-адресу http: // локальный: 5000 / пользователь / добро пожаловать "пользователь", по-видимому, является именем контекста вашего проекта. Попробуйте удалить @RequestMapping("/user") из своего класса.

Также вместо @PathVariable String data используйте @RequestParam Map<String,String> params. @PathVariable String data используется, когда данные являются частью URL-адреса, но в вашем случае это параметр. Окончательный код должен быть таким, как показано ниже.

    @RestController
    public class UserController {
        @RequestMapping(value = "/welcome", method = RequestMethod.POST)
        public void welcomeMember(@RequestParam Map<String,String> params ) {
            for(Map.Entry<String, String> entry : params.entrySet()){
             //This will print all paramters name and their value
             System.out.println(entry.getKey() + "-" + entry.getValue());
            }
        }   
    }

Вопрос 2:Как мне справиться с такими сумасшедшими данными? Должен ли я указывать каждый параметр пути?

Предлагаю следовать стандартной практике. Отправляйте данные в формате json. Это можно сделать разными способами, в зависимости от используемой вами интерфейсной технологии. В одну сторону - Ссылка

Другие вопросы по теме