Чтение данных формы POST с помощью HttpServletRequest - PullRequest
0 голосов
/ 04 июля 2018

Уже пару дней я пытаюсь прочитать данные, отправленные из формы, с типом содержимого 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 {}

Может быть, мне чего-то не хватает здесь, но как я могу прочитать эти значения?

...