Хорошо, я использую платежный сервис под названием Thrive cart, я делаю это для созданного мной веб-сайта членства. Когда пользователь заплатил, я хочу, чтобы он был перенаправлен на URL-адрес, где я могу использовать эти данные для обновления информации о текущих пользователях.
Данные, которые отправляются в параметрах, безумны:
Пока что я установил простой контроллер, который не работает:
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping(value = "/welcome", method = RequestMethod.POST)
public void welcomeMember(@PathVariable String data) {
System.out.println(data);
}
}
Как мне справиться с такими сумасшедшими данными? Должен ли я указывать каждый параметр пути?
Это похоже на проблему с тем, как остальные api вызываются со стороны потребителя службы.
попробуйте отправить данные в теле запроса, а не как параметр. Таким образом, вы можете использовать POJO для обработки данных.
Прежде всего, вы получаете не элементы пути, а параметры запроса, поэтому для получения значений вам потребуются аннотации @RequestParam.
Поскольку параметров запроса очень много, я бы также рекомендовал взять только один параметр - Map<String, String>
. Эта карта будет содержать все параметры в виде пар ключ / значение, например:
Если вы не уверены, получаете ли вы запрос 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);
}
}
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. Это можно сделать разными способами, в зависимости от используемой вами интерфейсной технологии. В одну сторону - Ссылка
@ user3667111, возможно, вы не получаете запрос POST, а запрос GET. Я обновил пример кода, чтобы он работал как с POST, так и с GET.