如何使用Spring Data Mongo DB对类进行建模,以存储具有不同字段和类型长度的嵌套JSON文档

时间:2017-03-15 05:14:44

标签: java json mongodb spring-data-mongodb bson

我是Spring Boot和Mongo DB的新手,我正在尝试模拟POJO课程 - '患者'和'调查'应存储和保存患者调查数据。调查数据将作为JSON从第3方来到我们,它包含任意号码。的问答和任意类型。

我应该使用什么数据类型/注释将嵌套的JSON存储为单个实体/对象? 我听说Mongo DB将JSON存储为BSON。但是我怎么能这样做呢?

目前我的模型类看起来像这样

@Document
public class Patient {

    @Id private String id;


    private String pID;
    private String firstName;
    private String lastName;

    @DBRef
    private List<Survey> surveys;

    public Patient() { }

    public Patient(String fName, String lName)
    {
        this.firstName = fName;
        this.lastName = lName;
    }

    public String getpID() {
        return pID;
    }

    public void setpID(String pID) {
        this.pID = pID;
    }

    public String getFirstName() {
        return firstName;
    }

    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }

    public String getLastName() {
        return lastName;
    }

    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
}



@Document
public class Survey {

    @Id private String id;

    private String pID;

    private Document surveyData;

    public Survey(String pID, Document surveyData)
    {
        this.pID = pID;
        this.surveyData = surveyData;
    }

    public String getpID() {
        return pID;
    }

    public void setpID(String pID) {
        this.pID = pID;
    }

    public Document getSurveyData() {
        return surveyData;
    }

    public void setSurveyData(Document surveyData) {
        this.surveyData = surveyData;
    }

}

@RepositoryRestResource(collectionResourceRel = "Survey", path = "survey")
public interface SurveyRepository extends MongoRepository<Survey, String> {

    public Survey findBypID(@Param("pID") String pID);

}

这是我用来测试它的JSON。

{
"pID": "test1",
"surveyData" : {
  "resourceType": "QuestionnaireResponse",
  "questionnaire": {
    "reference": "http://hl7.org/fhir/2016Sep/cqif/questionnaire-cqif-example.xml.html"
  },
  "item": [
    {
      "linkId": "Q1",
      "text": "Little interest or pleasure in doing things",
      "answer": [
        {
          "valueString": "Several Days"
        }
      ]
    },
    {
      "linkId": "Q2",
      "text": "Feeling down, depressed, or hopeless",
      "answer": [
        {
          "valueString": "Several Days"
        }
      ]
    },
    {
      "linkId": "Q3",
      "text": "Trouble falling or staying asleep",
      "answer": [
        {
          "valueString": "Several Days"
        }
      ]
    },
    {
      "linkId": "Q4",
      "text": "Feeling tired or having little energy",
      "answer": [
        {
          "valueString": "More than half days"
        }
      ]
    },
    {
      "linkId": "Q5",
      "text": "Poor appetite or overeating",
      "answer": [
        {
          "valueString": "Several Days"
        }
      ]
    },
    {
      "linkId": "Q6",
      "text": "Feeling bad about yourself - or that you are a failure or have let yourself or your family      down",
      "answer": [
        {
          "valueString": "More than half days"
        }
      ]
    },
    {
      "linkId": "Q7",
      "text": "Trouble concentrating on things, such as reading the newspaper or watching television",
      "answer": [
        {
          "valueString": "Several Days"
        }
      ]
    },
    {
      "linkId": "Q8",
      "text": "Moving or speaking so slowly that other people could have noticed. Or the opposite - being      so fidgety or restless that you have been moving around a lot more than usual",
      "answer": [
        {
          "valueString": "More than half days"
        }
      ]
    },
    {
      "linkId": "Q9",
      "text": "If you checked off any problems, how difficult have these problems made it for you to      do your work, take care of things at home, or get along with other people",
      "answer": [
        {
          "valueString": "Several Days"
        }
      ]
    }
  ]
}

}

我得到的例外是

2017-03-15 17:18:19.257 ERROR 15364 --- [nio-8080-exec-3] o.s.d.r.w.RepositoryRestExceptionHandler : Could not read document: Can not deserialize Class org.springframework.data.mongodb.core.mapping.Document (of type annotation) as a Bean
 at [Source: org.apache.catalina.connector.CoyoteInputStream@5d3981f6; line: 1, column: 1]; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize Class org.springframework.data.mongodb.core.mapping.Document (of type annotation) as a Bean
 at [Source: org.apache.catalina.connector.CoyoteInputStream@5d3981f6; line: 1, column: 1]

1 个答案:

答案 0 :(得分:0)

通过将surveyData的数据类型更改为&#39;对象&#39;现在我能够将嵌入的JSON对象存储在Java模型类中。

似乎&#39;文件&#39;因为类型无效,因为它是注释。