2017-02-20 59 views
0

與我之前的question類似,我試圖使用Spring REST訪問MongoDB中的數據。通過REST訪問MongoDB中的嵌套數據Spring

我有簡單的鍵值對的集合,可以訪問那些罰款。

{ 
    "_id" : ObjectId("5874ab4f19b38fb91fbb6180"), 
    "[OBJECT CATEGORY A]" : { 
     "_id" : ObjectId("5874ab4a19b38fb91fbb257b"), 
     "roID" : "72f8a8b5-71a7-40ac-b1ac-1ffc98a507ba", 
     "Name" : "[REDACTED]" 
    }, 
    "[OBJECT CATEGORY B]" : { 
     "_id" : ObjectId("5874ab4b19b38fb91fbb32a3"), 
     "roID" : "919446ab-1898-419f-a704-e8c34985f945", 
     "Name" : "[REDACTED]" 
    }, 
    "[RELATIONSHIP INFORMATION]" : [ 
     { 
      "[PROPERTY A]" : [ 
       { 
        "[VALUE A]" : 5.0 
       }, 
       { 
        "[VALUE B]" : 0.0 
       } 
      ] 
     }, 

屬性是某處8和20之間。

的:

{ 
    "_id" : ObjectId("5874ab4a19b38fb91fbb234f"), 
    "roID" : "7ed3f9a6-bb9b-4d16-8d1a-001b7ec40b51", 
    "Name" : "[REDACTED]" 
} 

的問題是,這些目的在顯示它們之間性質的關係,像這樣的另一個集合使用Java中第一個(普通)對象的定義如下所示:

@Document(collection="OBJ") 
public class Obj { 

    public Obj(){}; 

    @Id 
    public String id; 

    @Field("roID") 
    public String roID; 

    @Field("Name") 
    public String name; 

} 

存儲庫類:

@RepositoryRestResource(collectionResourceRel = "OBJ", path = "OBJ") 
public interface ObjRepo extends MongoRepository<Obj, String> { 

    List<Obj> findByName(@Param("name") String name); 
} 

問題是:如何訪問嵌套的對象?我試過使用LinkedHashMap代替複雜集合的字符串,curl只在我嘗試訪問它們時返回「null」。我試着定義一個類

public class BITS { 
    @Id 
    private String _id; 
    @Field("roID") 
    private String roID; 
    @Field("Name") 
    private String name; 

    public BITS(){} 

    public BITS(String _id,String roID, String name){ 
     this._id = _id; 
     this.roID = roID; 
     this.name = name; 
    } 

} 

訪問這些對象失敗。

回答

0

原來,類方法是正確的,只是沒有很好地執行。 我創建了一個簡單的JSON收集用於測試目的:

@Document(collection="JSON") 
public class JSON { 

    @Id 
    public String id; 

    @Field("squares") 
    public Square square; 

    @Field("dots") 
    public Dot dot; 

    public JSON(){}; 
    public JSON(String id, Square square,Dot dot){ 
     this.id = id; 
     this.square = square; 
     this.dot = dot; 
    }; 


} 

Square.java

public class Square { 

    private String id; 
    private int x; 
    private int y; 

    public Square(){}; 

    public Square(String id,int x, int y){ 
     this.id = id; 
     this.x = x; 
     this.y = y; 
    }; 

    public Map<String, Integer> getSquare() 
    { 
    Map<String, Integer> res = new HashMap<>(); 
    res.put("x", x); 
    res.put("y", y); 
    return res; 
} 

} 

(點是相同的,只是爲了測試) 所以它只是改造所需的響應確切地說,儘管它已經是數據庫中的格式了。 如果任何人都可以指出我在哪裏可以從反應中消除混亂,那會很好。目前看起來像這樣:

"_embedded" : { 
    "JSON" : [ { 
     "square" : null, 
     "dot" : { 
     "dot" : { 
      "x" : 4, 
      "y" : 3 
     } 
     }, 
     "_links" : { 
     "self" : { 
      "href" : "http://localhost:8080/JSON/58ac466160fb39e5e8dc8b70" 
     }, 
     "jSON" : { 
      "href" : "http://localhost:8080/JSON/58ac466160fb39e5e8dc8b70" 
     } 
     } 
    }, { 
     "square" : { 
     "square" : { 
      "x" : 12, 
      "y" : 2 
     } 
     }, 
     "dot" : null, 
     "_links" : { 
     "self" : { 
      "href" : "http://localhost:8080/JSON/58ac468060fb39e5e8dc8b7e" 
     }, 
     "jSON" : { 
      "href" : "http://localhost:8080/JSON/58ac468060fb39e5e8dc8b7e" 
     } 
     } 
    } ] 
    }, 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/JSON" 
    }, 
    "profile" : { 
     "href" : "http://localhost:8080/profile/JSON" 
    } 
    }, 
    "page" : { 
    "size" : 20, 
    "totalElements" : 2, 
    "totalPages" : 1, 
    "number" : 0 
    } 
}