【问题标题】:REST web application: what is the role of XML/JSON?REST Web 应用程序:XML/JSON 的作用是什么?
【发布时间】:2016-08-04 13:56:26
【问题描述】:

我目前正在学习 REST 应用程序,尤其是 REST 的 Java 实现。

我不确定 JSONXML 在 REST 中扮演什么角色?

一个示例来展示我目前的理解:

  1. 用户单击前端的按钮。
  2. 用户被重定向到一个 URL,例如 /user/{userid}
  3. 服务类中的 Java 方法调用存储库(例如 Crud Repository)类来检索数据
  4. 存储库从数据库中提取数据(例如关于该特定用户)
  5. 数据传回服务类,然后在 UI 上显示给用户。

JSONXML 在哪里适合这个过程?

【问题讨论】:

  • Service class 然后将结果传递给controllercontroller 会将数据转换为JSON 并传递给View
  • 好的,基本上需要 JSON 或 XML 才能真正向用户展示它?
  • 等我解释为答案,。希望这会让你清楚

标签: java json xml rest service


【解决方案1】:

如果我们将您的第 5 步分开... 1) 数据以某种格式从服务返回 2) UI 以该格式接收它并将其显示在屏幕上。 这种格式是 XML 或 JSON,甚至是纯文本。这是您在从 UI 进行调用时提到的 Accept 类型,并在 service 中设置响应标头。

JSON 代表 Javascript 对象表示法,因此如果响应是 JSON 格式,您可以直接将其用作 javascript 变量,只需使用 JSON.parse 对其进行解析即可。 Accept 类型实际上取决于您的要求。在大多数情况下,首选 JSON,因为它很容易转换为 JS 对象。

【讨论】:

  • 这很有帮助。只是为了确认:数据通常作为 java 对象从存储库传回?那么这个 java 对象是如何转换成 JSON 的呢?
  • 如果您使用的是 Spring,那么您可以找到 JSON 视图解析器来执行这些操作。你可以关注websystique.com/springmvc/…——这是一个非常好的示例项目。您可以找到 JSON、XML、文本甚至 pdf 和 xls 解析器来形成您的响应。希望对您有所帮助。
  • 好吧,我想看看它,但我现在正试图理解“幕后”。以下是正确的吗? :1.服务类传回一个Java对象(PO​​JO)? 2. Java 对象用于创建 JSON 对象 3. JSON 对象用于在屏幕上向用户显示数据?
  • 是的,你可以这么说。在前端,您不会直接收到 JSON 对象。它只是一个字符串,您需要将其解析为 JS 对象。运行示例,查看请求响应,你会更好理解。
【解决方案2】:

是数据从服务返回到前端的格式。

【讨论】:

  • 谢谢,您能否更新我给出的示例以显示我使用了 JSON/XML?
【解决方案3】:

前端和api之间的数据传输是在JSON和/或XML中完成的。

所以,简单地说... 用户通过某个网页请求一些数据,该网页向 RESTful API 请求特定数据,该 api 将数据作为 JSON 发送给网页,然后网页对其进行操作并显示它或对这些数据做任何需要做的事情。

这是描述其作用的一般方式

【讨论】:

  • 好的,谢谢,所以 JSON 与从数据库中检索无关?您能否编辑我上面的示例以显示 JSON 如何适合其中?
  • 正确。您正在与之交谈的 api 可以使用数据库来存储信息,但它主要通过 json 和 xml 进行通信
  • 请将答案显示为序列以帮助理解>
【解决方案4】:

控制器内部的一个方法如下所示,它给出 json 响应

@RequestMapping(value = "/getSomething", method = RequestMethod.POST)
    public @ResponseBody String getSomething(HttpServletRequest req) 
    {

        JSONArray jsonArr = new JSONArray();
        Collection someList = new ArrayList();

        someList = someService.getsomeList(req); // here you get the response from service class to controller
        Iterator iter = categoryList.iterator();

        while (iter.hasNext()) // iterate the colleection
        {
                JSONObject jsonObj = new JSONObject();
                SomeClass someObj = (SomeClass) iter.next();
                jsonObj.put("name", someObj.getName());
                jsonArr.put(jsonObj);
        }

        return jsonArr.toString(); // return jsonstring as response
    }

这就是在视图中处理它的方式(比如JSP)。这里对控制器进行 ajax 调用,并将响应设置为页面中的字段。

$.ajax({
                        url : "getSomething.htm", //request send to controller
                        type : "POST",
                        data : {
                            'someData' : data
                        },
                        success : function(data) {
                            var arr = JSON.parse(data);
                            response($.map(arr, function(item) {
                                return {
                                    value : item.name, //setting the value to the view 

                                };
                            }));
                        }
                    });

希望这会有所帮助!

【讨论】:

  • 谢谢,所以: 1. 服务类传回一个Java 对象(PO​​JO)? 2. Java 对象用于创建 JSON 对象 3. JSON 对象用于在屏幕上向用户显示数据?
  • @java123999 完全正确。如果这可以解释您的问题,请选择正确答案
  • 只是想澄清一点:Java 处理程序类将带有 json 数据的响应(例如 OK)返回到视图?这就是数据在视图上显示的方式?
  • @java123999 我没有收到你的问题!你能澄清一下吗!
【解决方案5】:

正如其他人所说,在您的示例中,当数据从服务器返回到客户端时,JSON/XML 适合链的末端(几乎)。

将 JSON 和 XML(以及其他格式)视为一种盒子。有些盒子是用塑料制成的,有些是用纸板制成的,因为它们有不同的用途。

JSON/XML 是您向/从服务器发送/请求的数据的“盒子”类型。

在你的例子中:

  • 用户点击前端的按钮。
  • 用户被重定向到一个 URL,例如 /user/{userid}
  • 服务类中的 Java 方法调用存储库(例如 Crud Repository)类来检索数据
  • 存储库从数据库中提取数据(例如关于该特定用户)
  • 来自 DB 的数据从服务器的数据格式(“盒子类型”)“转换”为更常见的格式(如 JSON 或 XML)
  • JSON/XML 格式的数据被发送到前端用于显示目的

这样想:如果没有供人员/系统参考的通用格式,那么如果您查询 Oracle 数据库,则需要能够理解该格式。如果您随后必须查询 Sybase 数据库,那么您也需要能够理解这一点。

要解决此问题,您可以选择一种“通用”格式(一种更容易装入更多卡车的箱子,而不是只能由特定类型的卡车运输的箱子),从而更容易“传输”这些数据。

所以本质上,JSON/XML 只是一种表示数据的方式,因此它可以用来表示原本是其他“难以阅读”格式的数据,并使其更易于阅读或使用。

例如,通过将 DB 对象作为 JSON 返回,您可以在网页中显示它们,因为大多数网页框架都理解 JSON,而其中很少有本机理解 Oracle/Sybase 格式(有驱动程序可以做到这一点,但它是超出了这个玩具示例的范围)。

您还可以使用它与其他同样理解 JSON 的服务器进行通信(例如第三方 API),因此如果服务器 A 和 B 具有不同的数据表示(内部一个由 Oracle 支持,另一个由 Sybase 支持)他们仍然可以使用像 JSON 这样的“通用”格式相互交谈。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-11
    • 2020-08-19
    • 2011-04-12
    • 2011-01-07
    • 1970-01-01
    • 2011-09-23
    • 1970-01-01
    • 2013-04-14
    相关资源
    最近更新 更多