我正在使用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;
}
有人可以分享我如何接收此数据并将其转换为地图的指南,或者我可以直接获取地图!
答案 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库。
您可以在 Maven存储库中找到它,并且很容易将JSON
解析为Map
或JSONArray
或JSONObject
...取决于您的需要。.
这里是一个示例,展示了如何将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/