Как прочитать массив JSON из HttpServletRequest? - PullRequest
0 голосов
/ 09 июня 2019

Я новичок в сервлете и не могу прочитать массив JSON из HttpServletRequest

Я отправляю ниже JSON на Java

page: 1
start: 0
limit: 20
sort: [{"property":"fiscalYear","direction":"DESC"}]
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String[] s=request.getParameterValues("sort");
        for(int i=0;i<s.length;i++)
}           System.out.println(s[i]);

фактическая выработка

 [{"property":"fiscalYear","direction":"DESC"}]

ожидаемый вывод получить значения fiscalYear и DESC отдельно

Ответы [ 3 ]

1 голос
/ 09 июня 2019

getParameterValues ​​(имя строки) вернет массив строк

String[] getParameterValues(String name)

Возвращает массив объектов String, содержащий все значения, которые имеет данный параметр запроса, или ноль, если параметр не существует.

Если параметр имеет одно значение, массив имеет длину 1.

getParameter (имя строки) вернет только String

Возвращает значение параметра запроса в виде строки или ноль, если параметр не существует. Параметры запроса - дополнительная информация, отправляемая вместе с запросом. Для HTTP-сервлетов параметры содержатся в строке запроса или в опубликованных данных формы.

Этот метод следует использовать только в том случае, если вы уверены, что параметр имеет только одно значение. Если параметр может иметь более одного значения, используйте getParameterValues ​​(java.lang.String).

На основании этого вы можете перейти на getParameter, который возвращает JSON, представляющий строку

String s=request.getParameter("sort"); // {"property":"fiscalYear","direction":"DESC"}

Теперь используйте ObjectMapper для чтения парсера JSON строки

ObjectMapper objectMapper = new ObjectMapper();
JsonNode jsonNode = objectMapper.readTree(s);
String property = jsonNode.get("property").asText();
String direction = jsonNode.get("direction").asText();

Если это Array из JsonObjects //[{"property":"fiscalYear","direction":"DESC"}]

JsonNode jsonNode = objectMapper.readTree(s);
JsonNode node = jsonNode.get(0);
String property = node.get("property").asText();
String direction = node.get("direction").asText();
0 голосов
/ 10 июня 2019
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        String str=request.getParameterValues("sort");
    //  str=" [{\"property\":\"fiscalYear\",\"direction\":\"DESC\"}]";   
      JSONArray array=new JSONArray(str);
      for(int i=0;i<array.length();i++){
              JSONObject json_obj = array.getJSONObject(i);
            System.out.println( json_obj.getString("direction"));

      }
} 

ВЫХОД

DESC

0 голосов
/ 09 июня 2019

Вы можете создать Объект, который содержит эту информацию:

public class SortDto {

  private String property;
  private String direction;

  // getters, setters, toString() ..
}

Затем создайте ObjectMapper следующим образом:

ObjectMapper mapper = new ObjectMapper();
String sortJson = request.getParameter("sort");
// I suppose that sortJson is => {"property":"fiscalYear","direction":"DESC"}
SortDto dto = mapper.readValue(sortJson, SortDto.class);

Затем вы можете просто переопределить метод toString() в своем классе или вызвать dto.getProperty() dto.getDirection(), чтобы получить значения отдельно.


Примечание

Я использовал request.getParameter("sort"), который возвращает одну строку вместо request.getParameterValues("sort"), которая возвращает массив значений

...