Уже пару дней я пытаюсь прочитать данные, отправленные из формы, с типом содержимого application/x-www-form-urlencoded
.
Согласно Документам Mozilla данные, отправляемые на сервер с помощью запроса POST и application/x-www-form-urlencoded
типа содержимого, отправляются на сервер следующим образом:
POST / HTTP/1.1
Host: foo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
say=Hi&to=Mom
Я хочу прочитать ключ и значение say
и to
с помощью HttpServletRequest
.
Вот моя попытка:
@POST
@Path("/webhook/{psp_code}")
public Response notifyPSP(@Context HttpServletRequest httpServletRequest,
@PathParam("psp_code") String pspCode) {
String payload = getRequestBody( httpServletRequest );
Map<String, List<String>> formData = getFormData( httpServletRequest );
log.info( "Payload {}", payload);
log.info( "Form Data {}", formData );
}
private String getRequestBody(HttpServletRequest request) {
String content;
try
{
ServletInputStream inputStream = request.getInputStream();
content = IOUtils.toString( inputStream );
}
catch ( IOException e )
{
content = null;
}
return content;
}
private Map<String, List<String>> getFormData(HttpServletRequest request) {
Map<String, String[]> parameterMap = request.getParameterMap();
Map<String, List<String>> collect = parameterMap.entrySet().stream().collect( Collectors.toMap( entry -> entry.getKey(), entry -> Arrays.asList( entry.getValue() ) ) );
return collect;
}
Выходные значения пусты:
Payload
Form Data {}
Может быть, мне чего-то не хватает здесь, но как я могу прочитать эти значения?