如何从我的休息服务发送一个 json 对象,以便我可以在客户端 javascript 上解析出来
Posted
技术标签:
【中文标题】如何从我的休息服务发送一个 json 对象,以便我可以在客户端 javascript 上解析出来【英文标题】:How do I send a json object from my rest service so I can parse in out on the client side javascript 【发布时间】:2011-09-16 16:44:18 【问题描述】:我只是想从我的服务器返回一个 JSON 对象(使用 ajax)到客户端 - 所以我能够在客户端读取数据
@GET
@Produces("application/json")
@Consumes("application/json")
@Path("/getStatus/")
public void getStatus(
@Context HttpServletRequest request,
@Context HttpServletResponse response) throws ServletException,
IOException
//create the JSON Object to pass to the client
JSONObject object=new JSONObject();
response.setContentType("text/javascript");
try
object.put("name", nameDataFromClass);
object.put("status",someData);
catch(Exception e)
throw new ServletException("JSON Hosed up");
String json = object.toString();
response.getOutputStream().println(json);
这将在 JSP 的客户端我想在页面上提取数据
<html>
<head>
<!-- Calls in jQuery file -->
<script src="jquery.js"></script>
<title>JQuery Test</title>
<script>
$.getJSON("http://localhost:8080/scout/rest/admin/mamba/getStatus",
function(json)
alert("Server naame: " + json.name);
);
</script>
</head>
<body>
</body>
</html>
【问题讨论】:
那么什么不适合你? 客户端没有收到数据。我的宁静java应该有回报吗?我缺少一些 jquery/ajax 片段吗? 请求真的到达java层了吗? 否 - 刚刚检查过。我还需要为 ajax 部分实现什么吗? 好的,请求正在进来。尝试写入然后刷新响应。不知道为什么要在其中包含“回调”位。可能会使您的 json 无效。 【参考方案1】:Jackson 库应该负责将 json 对象编组到您的对象,反之亦然。只需创建一个简单的 POJO,如下所示:
public class Mystatus
public String name;
public String status;
public Mystatus() // a default empty constructor is needed
public Mystatus(String name,String status)
this.name=name;
this.status=status;
然后从你的 RESTful 网络服务返回这个对象:
@GET
@Produces("application/json")
@Consumes("application/json")
@Path("/getStatus/")
public Mystatus getStatus(
@Context HttpServletRequest request,
@Context HttpServletResponse response)
response.setContentType("text/javascript");
return new Mystatus("Hello","World");
【讨论】:
【参考方案2】: @GET
@Produces("application/json")
@Consumes("application/json")
@Path("/status")
// server:8080/server/rest/status
public String getStatus(
@Context HttpServletRequest request,
@Context HttpServletResponse response) throws Exception
// Create a string to hold JSON
String json;
Collection<Server> svr = SomeHashMap.getStuff().values();
JSONArray jArray = new JSONArray();
for (Server i : svr)
JSONObject m = new JSONObject();
ServerStatus status = i.getStatus();
m.put("id", i.getId());
m.put("name", i.getName());
m.put("status", status.getState());
jArray.add(m);
json = jArray.toString();
response.setContentType("text/javascript");
response.getOutputStream().print(json);
response.flushBuffer();
return null;
index.jsp
<head>
<script src="jquery-1.6.js"></script>
<!--AJAX FOR STATUS PAGE REFRESH -->
<script type="text/javascript">
//when page is ready do the following
$(document).ready(function()
// Disable caching of AJAX responses
$.ajaxSetup (cache: false);
//set interval of refresh
setInterval(doAjaxStuff, 1000);
//function to call to fire off ajax
function doAjaxStuff()
$.ajax
(
url: "status", // <-- this refers to the Controller function above called "status()"
dataType: 'json',
success: function(json)
//traverse throught each element in the incoming JSON object
for(var i = 0; i< json.length; i++)
if(json[i].status == "ACTIVE")
$("#Status"+json[i].id).html("Running");
);
);
</script>
</head>
【讨论】:
以上是关于如何从我的休息服务发送一个 json 对象,以便我可以在客户端 javascript 上解析出来的主要内容,如果未能解决你的问题,请参考以下文章
使用 ANGULARJS $resource 发布一个 JSON 数组
如何将 JSON 对象从 React Native 发送到 Laravel 服务器?
如何使用 AJAX 将 JSON 数据发送到 ASP 服务器?