Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何在REST中实现父子关系,允许JAXRS中的层次结构 问题:如何在REST中检索分层对象?_Mysql_Rest_Jersey_Nested_Hierarchy - Fatal编程技术网

Mysql 如何在REST中实现父子关系,允许JAXRS中的层次结构 问题:如何在REST中检索分层对象?

Mysql 如何在REST中实现父子关系,允许JAXRS中的层次结构 问题:如何在REST中检索分层对象?,mysql,rest,jersey,nested,hierarchy,Mysql,Rest,Jersey,Nested,Hierarchy,我有一个以父子方式关联的对象的层次结构。数据存储在关系数据库中,每条记录通过使用外键parent\u id指向其父记录。在这种情况下,所有记录都存储在一个表中。每个层次结构级别都可以通过遍历父级列表直到到达根节点来解析。如何使用REST访问这些元素,特别是在我可能事先不知道层次结构的深度时 +----------------------------------+----+-----------+ | Hierarchy Level | id | parent_i

我有一个以父子方式关联的对象的层次结构。数据存储在关系数据库中,每条记录通过使用外键
parent\u id
指向其父记录。在这种情况下,所有记录都存储在一个表中。每个层次结构级别都可以通过遍历父级列表直到到达根节点来解析。如何使用REST访问这些元素,特别是在我可能事先不知道层次结构的深度时

+----------------------------------+----+-----------+
| Hierarchy Level                  | id | parent_id |
+----------------------------------+----+-----------+
| thing/sub1                       | 1  | NULL      |
| thing/sub1/subsub-A              | 2  | 1         |
| thing/sub1/subsub-A/subsubsub-A1 | 3  | 2         |
| thing/sub1/subsub-A/subsubsub-A2 | 4  | 2         |
| thing/sub1/subsub-B              | 5  | 1         |
| thing/sub2                       | 6  | NULL      |
| thing/sub2/subsub-A              | 7  | 6         |
| thing/sub2/subsub-C              | 8  | 6         |
+----------------------------------+----+-----------+
目标:解析嵌套对象 实现一个能够解析以下URL的REST接口:

GET http://www.example.org/service/thing/sub1/subsub-A/subsubsub-A2
答案是

{id=4}
迄今为止所做的尝试: 很明显,以下结构很容易解决,因为我知道应该使用哪些路径参数:

http://www.example.org/service/thing/sub1/
我正在琢磨如何解析URL中的嵌套子组件。我确实找到了,但我不知道如何将其应用到我的场景中。我正在使用Jersey框架进行实现。我正在寻找一种方法,如何从后向前遍历REST URL,检索每个中间子组件的父ID,从而能够识别完整的对象,例如:

http://www.example.org/service/1/2/4

我认为解析这样的URI结构要快得多:
/service/tree/{id}
而不是使用嵌套标识符

为单个节点的父节点、同级节点创建链接实际上非常容易:

  • collection
    -目标IRI指向表示上下文IRI的集合资源的资源
  • up
    -指文档层次结构中的父文档
  • self
    -传递链接上下文的标识符

  • first
    -指一系列资源中最远的前一个资源的IRI

  • previous
    -指有序资源系列中的前一个资源。“prev”的同义词
  • next
    -表示链接的上下文是系列的一部分,系列中的下一个是链接目标
  • last
    -指一系列资源中最远的后续资源的IRI
如果您想要一个有序的树,则该模型将是一个更好的分层模型。

建议的解决方案 为了访问路径的层次结构,还可以使用URL提供的路径段。这可以通过使用需要注入的中的getPathSegments()方法来实现

@Path("/segments")
public class PathSegments {
    @Context
    UriInfo uriInfo;


    public PathSegments() {

    }

    @GET
    @Path("{ uri: (.+)?}")
    @Produces(MediaType.TEXT_PLAIN)
    public String resolve() {
        String hierarchy="";
        for (int i = 0; i < uriInfo.getPathSegments().size(); i++) {
            hierarchy+= "[" + i + "] " + uriInfo.getPathSegments().get(i);
            if(i<uriInfo.getPathSegments().size()-1){
                hierarchy+=" --> ";
            }

        }
    return hierarchy;
    }
}

谢谢@inf3rno,我知道我可以只解析URL,但从技术上讲,这并不能回答我的问题。
[0] segments --> [1] a --> [2] b --> [3] c --> [4]