如何从HttpServletRequest读取JSON数组?

时间:2019-06-09 08:52:16

标签: java json servlets jackson objectmapper

我对servlet非常陌生,无法从HttpServletRequest读取JSON数组

我将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"}]

预期的输出分别获得值为financialYearYear和DESC

3 个答案:

答案 0 :(得分:1)

getParameterValues(String name) 将返回字符串数组

String[] getParameterValues(String name)
  

返回一个String对象数组,其中包含给定请求参数具有的所有值;如果该参数不存在,则返回null。

     

如果参数具有单个值,则数组的长度为1。

getParameter(String name) 仅返回String

  

以字符串形式返回请求参数的值,如果该参数不存在,则返回null。请求参数是与请求一起发送的额外信息。对于HTTP Servlet,参数包含在查询字符串或发布的表单数据中。

     

只有在确定参数只有一个值时,才应使用此方法。如果参数可能具有多个值,请使用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();

答案 1 :(得分:0)

您可以创建一个保存此信息的对象:

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")返回一个值数组

答案 2 :(得分:0)

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