Как получить значения getParameterValues ​​в порядке их отправки?

Я отправляю данные формы регистрации через метод HttpPost сервлету и получаю эти данные с помощью getParameterValues.

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

response.setContentType("text/html");
    ObjectOutputStream out = new ObjectOutputStream(response.getOutputStream());
    Enumeration paramNames = request.getParameterNames();
    String params[] = new String[7];
    int i=0;

    while(paramNames.hasMoreElements())
    {
        String paramName = (String) paramNames.nextElement();
        System.out.println(paramName);


        String[] paramValues = request.getParameterValues(paramName);
        params[i] = paramValues[0];

        System.out.println(params[i]);

        i++;
    }

Я получаю вывод, как это

5_Country
United States
4_Password
zxcbbnm
1_Lastname
xyz
0_Firstname
abc
3_Email
abc@xyz.com
6_Mobile
1471471471
2_Username
abcd

Сначала я хочу 0_Firstname, затем 1_Lastname, затем 2_Username, потому что я хочу вставить эти данные в базу данных. Здесь 0,1,2... Я написал только для указания, что я хочу значение в этом порядке.

2 ответа

Решение

Вы не получите имена параметров в порядке с помощью request.getParameterNames();,

Вы можете использовать

String [] parameterNames =  new String[]{"param1","param2","param3"};

for(String param : parameterNames){
 System.out.println(param);
}

где parameterNames содержит последовательность, в которой вы хотите ваши параметры. Вы даже можете настроить его и прочитать последовательность из файла конфигурации.

ИЛИ ЖЕ

Ты можешь использовать

 request.getQueryString() to get the QueryString, while using GET Method

ИЛИ ЖЕ

Ты можешь использовать

 request.getInputStream() to get the QueryString, while using POST Method
 and parse the raw data to get the Query string.

Получив строку запроса, вы можете разбить ее и использовать по своему усмотрению.

Попробуй это

Enumeration<String> enumParamNames = request.getParameterNames();

Перерабатывать Enumeration в List чтобы отсортировать их.

List<String> listParamNames = Collections.list(enumParamNames);

ParamNames будет выглядеть так перед сортировкой

[5_Country, 4_Password, 1_Lastname, 0_Firstname, 2_Username, 3_Email]

Сортировать список по Collections.sort(listParamNames);

Отсортированные paramNames будут выглядеть так

[0_Firstname, 1_Lastname, 2_Username, 3_Email, 4_Password, 5_Country]

Теперь вы можете цикл с listParamNames чтобы получить связанный param value

for(String paramName : listParamNames)
{
    System.out.println(paramName);
    System.out.print("\t");

    /* Instead of using getParameterValues() which will get you String array, in your case no need for that. You need only one `Value`, so you go with `getParameter` */
    System.out.print(request.getParameter(paramName));
}

Выход:

0_Firstname - abc

1_Lastname - xyz

etc....

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