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

@ResponseBody

@RequestMapping(value = {"apiRequest"}, method = {RequestMethod.POST})

public String contestApiSignUp(HttpServletRequest req) throws JSONException {
try {
    String username = req.getParameter("username");
    String firstname = req.getParameter("firstname");
    String lastname = req.getParameter("lastname");
    String password = req.getParameter("password");
    String phone = req.getParameter("phone");

Здесь значения, которые я получаю, равны нулю. То есть имя пользователя = null, имя = null...

Я нажимаю почтовый запрос со значениями http://localhost:8080/apiRequest.htm

username = Subhajit
firstname = Subha
...

как это.

Но пока я использую тот же код, но

@RequestMapping(value = {"apiRequest"}, method = {RequestMethod.GET})

используя GET вместо POST, я получаю правильные значения.


person smondal345    schedule 28.10.2016    source источник
comment
можете ли вы показать свой точный почтовый запрос с заголовками   -  person kuhajeyan    schedule 28.10.2016


Ответы (2)


Когда вы отправляли HTML-форму POST на свой URL-адрес /apiRequest, заполняли ли вы свои данные (имя пользователя, имя и т. д.) в полях формы или прикрепляли их к отправленному URL-адресу (например, apiRequest.htm?username=test&...)?

Потому что при втором подходе ваши данные будут доступны только через запрос GET, а не POST. Первый подход будет работать с запросом POST.

Кроме того, вам не нужно явно вызывать getParameter для HttpServletRequest в контроллере Spring.

Ты можешь это сделать :

@ResponseBody
@RequestMapping (value = "apiRequest", method = RequestMethod.POST)
public String contestApiSignUp(
        @RequestParam ("username") String username,
        @RequestParam ("firstname") String firstname,
        @RequestParam ("lastname") String lastname,
        @RequestParam ("password") String password,
        @RequestParam ("phone") String phone) {
    return "Hello World";
}
person Adrien Ferrand    schedule 28.10.2016
comment
Большое спасибо за ваш ответ. apiRequest.htm?username=test& Я не публикую такие данные. Я использую почтальона, устанавливая параметры как заголовки и их значения. - person smondal345; 28.10.2016
comment
Хорошо, я никогда не использовал почтальон, но он должен работать как другие инструменты запросов API. Вы не должны пытаться передавать произвольные пары ключ/значение в заголовках вашего запроса. Эти заголовки предназначены для метаданных запроса, а не для данных. Чтобы передать данные в запросе POST, вы должны создать тело запроса, содержащее эти пары ключ/значение. Проверьте документ почтальона, вы можете сделать это с помощью интерфейса, похожего на форму. См. getpostman.com/docs/requests, раздел Request Body › form-data. - person Adrien Ferrand; 28.10.2016

Из комментариев вы сказали, что пытаетесь отправить запрос с почтальоном. Итак, вы создаете веб-сайт или веб-сервисы? в любом случае вы не должны отправлять свои данные в заголовках.

  • Если вы создаете веб-сайт, соберите файл HTML, из которого вы можете отправить форму этому контроллеру.
  • Если вы создаете веб-сервис, измените контроллер и позвольте ему принимать тело JSON (или XML - я бы не одобрял это). Следуйте этому https://stackoverflow.com/a/40226580/6785908. А затем от почтальона (или curl) вместо этого отправьте json.
person so-random-dude    schedule 28.10.2016