您好我正在制作一个Maven rest Web服务应用程序,我需要在我的JSONRest代码中获取hashmap值。我怎么能这样做?
这是我的服务代码,它打印JSON值:
@GET
@Path("/ind")
@Produces("application/json")
public HashMap<String,String> json()
{
HashMap<String,String> m = new HashMap<String,String>();
m.put("Fiyas", "basha");
m.put("Rajesh", "Babu");
JSONObject j = new JSONObject();
try {
if(j != null)
j.put("emp", m);
} catch (JSONException ex) {
ex.getMessage();
}
return m;
}
打印{"Fiyas":"basha","Rajesh":"Babu"}
现在我需要在我的dojo脚本中的特定JSON emp键的选择框中调用此JSON值
我的JSONRest代码:
<script>
require(["dojo/store/JsonRest", "dojo/dom-construct"], function(JsonRest, domConst){
var store = new JsonRest({
target: "http://localhost:8080/userservices/rest/rest/ind",
});
store.query().then(function(jsonData){
alert(jsonData.emp);
domConst.place("<option value=''>Year's of Exp</option>","Experience");
for(var i in jsonData.emp)
{
domConst.place("<option value="+jsonData.emp[i]+">" + jsonData.emp[i] + "</option>","Experience");
}
});
});
</script>
我收到undefined
并且无法获取此脚本中的值,但我在firebug中收到了响应和JSON值。
如何逐个获取hashmap值?请,任何帮助将不胜感激,并告诉我我做错了什么。
谢谢
答案 0 :(得分:0)
如果您正在反弹Java servlet,则需要将JSON字符串作为响应传递回前端。我不知道你的结构是什么,但如果你的servlet扩展HttpServlet
,你应该做一些类似的事情:
@Override
protected void doGet(final HttpServletRequest request, final HttpServletResponse response) {
HashMap<String, String> m = json();
JSONObject j = new JSONObject();
try {
if(j != null) {
j.put("emp", m);
}
} catch (JSONException ex) {
ex.getMessage();
}
// Send the JSON string back
response.getWriter().print(j.toString());
}
您的json()
方法可以稍微减少一点:
@GET
@Path("/ind")
@Produces("application/json")
public HashMap<String,String> json()
{
HashMap<String,String> m = new HashMap<String,String>();
m.put("Fiyas", "basha");
m.put("Rajesh", "Babu");
return m;
}
答案 1 :(得分:0)
store.query
调用的响应应该是一个哈希映射数组,而不是单个对象。 store.get
返回单个对象。对store.query
的响应还需要有一个Content-Range标头来描述服务器上可用的总对象数。这些都记录在JsonRest商店的Implementing a REST server文档中。