如何从我的休息服务发送一个 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 上解析出来的主要内容,如果未能解决你的问题,请参考以下文章

如何在休息服务中读取json数组或Json对象?

使用 ANGULARJS $resource 发布一个 JSON 数组

如何将 JSON 对象从 React Native 发送到 Laravel 服务器?

如何使用 AJAX 将 JSON 数据发送到 ASP 服务器?

从 Android 发送 JSON HTTP POST 请求

我如何通过 json 将数据从我的设备发送到我的 php 文件