无法从POST请求中检索数据

时间:2019-11-27 10:01:46

标签: java java-api

我正在使用JAVA 1.8进行编写,并使用Apache Tomcat运行服务器,但是我无法从POST请求(即JSON)中检索数据。

我实际上在HashMap中需要它,即使它可以在JSON中读取,我甚至可以解析并将其转换为HashMap。我已经尝试了Internet上的多个链接,但总是遇到类似Could not deserialize to type interface PACKAGE NAME.

的异常
   @POST
    @Produces("application/json")
    @Consumes("application/json")
    @Path("ClassifyCase")
    public Rules Classify(HttpServletRequest request) {

        StringBuffer jb = new StringBuffer();
          String line = null;
          try {
            BufferedReader reader = request.getReader();
            while ((line = reader.readLine()) != null)
              jb.append(line);
          } catch (Exception e) { System.out.println("Buffer Reader Error"); }

          System.out.println("What I read: "+jb);
        System.out.println("Here la la l ala ");
//      System.out.println("Case: ++ "+Case.toString());
        System.out.println("Here la la l ala ");
        Rules foundRule = new Rules();
//        List<Rules> objListRules = new  ArrayList<Rules>();
        try
        {
            DataAccessInterface objDAInterface = new RuleDataAdapter();
            AbstractDataBridge objADBridge = new DatabaseStorage(objDAInterface);
//          foundRule = objADBridge.Classify(Case);
            logger.info("Classification done!");
        }
        catch(Exception ex)
        {
            logger.info("Error in classification");
            System.out.println("Couldnt Classify Properly!");
//          return 
        }
        return foundRule;
}    

This is how I am sending data through postman in JSON

有人可以分享我如何接收此数据并将其转换为地图的指南,或者我可以直接获取地图!

3 个答案:

答案 0 :(得分:1)

String jsonString = "{\n" +
    "\t\"1\": \"1\",\n" +
    "\t\"FPG\": \"50\",\n" +
    "\t\"Symptoms\": \"Yes\"\n" +
    "}";
Map<String, String> map = new Gson().fromJson(jsonString, Map.class);
for (String key: map.keySet()) {
    System.out.println(map.get(key));
}

答案 1 :(得分:1)

我强烈建议您使用此JSON库。

You can find it in Maven Repository

您可以在 Maven存储库中找到它,并且很容易将JSON解析为MapJSONArrayJSONObject ...取决于您的需要。.

这里是一个示例,展示了如何将JSON解析为HashMap

Map<String, Object> map = new JSONObject(--JSONString here--).toMap();

仅此而已...

现在,如果您的JSON有一个对象列表,我的意思是像maps的列表一样,您只需要这样做...

JSONArray jsonArray = new JSONArray(--JSON string here--);

 for(int i = 0; i < jsonArray.length(); i++){
   Map<String, Object> map = jsonArray.getJSONObject(i).toMap();
 }

以下是说明。

JSON字符串作为参数传递给JSONArray JSONArray does is, take your json string a parse it to like a list

然后,您创建一个for,以获取该列表中的每个Object并将其解析为map

注意JSONObject的作用是获取JSONArray的对象并进行解析...您可以将其解析为地图,也可以获取每个该地图的对象。

答案 2 :(得分:0)

您发送的请求的主体中不包含正确的JSON。您缺少逗号“,”。应该是这样的:

{
  "1":"1",
  "FPG":"50",
  "Symptoms":"yes"
}

只需对其进行更改,并为消息提供正确的JSON格式。 即使该请求不在您的控制范围内,我也强烈建议您与创建该消息的服务部门联系,并请他们进行修复。 对于我来说,使自己的解串器处理“不适当的”消息是最后的选择。

一种简单的检查JSON格式是否正确的方法是在线格式化程序,例如https://jsonformatter.org/