当前位置: 首页 > 知识库问答 >
问题:

Morphia&MongoDB通过REST在JSON返回类型中的问题

萧焱
2023-03-14
@Entity(value = "orgs", noClassnameStored = true)
public class Org
{
    @Id
    @Property("id")
    private ObjectId id;
    private String name = null;
    // Some other properties

    // Getter/Setter for Object ID
    public ObjectId getId(){return id;}
    public void setId(ObjectId id){this.id = id;}

    // Getter & Setter for name...
    // the other Getter & Setter methods
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Org createOrg(Org org)
{
    Morphia morphia = new Morphia();
    morphia.mapPackage("com.dgfx.entity");

    try
    {
        Datastore ds = morphia.createDatastore(MongoDBHelper.getMongoClient(), "dgfx-admin");
        ds.save(org);
        System.out.println("org name = " + org.getName() + ", id = " + org.getId()); // Prints the new Org ID perfectly fine!!!
        return org;

    } catch (UnknownHostException e)
    {
        e.printStackTrace();
        return null; //TODO: Better return type
    }
}

c.POST请求(使用Postman和contenttype:application/json)...

{
    "altName": "",
    "levels": [],
    "name": "My Organisation",
    "parentId": "",
    "shortName": "",
    "type": ""
}

d.执行POST后,MongoDB集合中的数据看起来很好...

> db.orgs.find();
{ "_id" : ObjectId("56a9462902c3192d88d64bc3"), "type" : "", "name" : "My Organisation", "altName" : "", "shortName" : "", "parentId" : "" }
{ "_id" : ObjectId("56a9464b02c3192d8845d128"), "type" : "", "name" : "Ecosys Clover", "altName" : "", "shortName" : "", "parentId" : "" }

E.一切都像魅力一样工作,直到这里,SysOut打印出组织新创建的ID...

ds.save(org);
System.out.println("org name = " + org.getName() + ", id = " + org.getId()); // Prints the new Org ID perfectly fine!!!
{
  "altName": "",
  "id": {},
  "levels": [],
  "name": "My Organisation",
  "parentId": "",
  "shortName": "",
  "type": ""
}
    null

感激任何帮助和提前感谢...

SG

共有1个答案

刘奇
2023-03-14

所有的,

这并不是一个如何解决问题的答案,而是一个变通办法。

  1. 我使用的是字符串ID而不是objectid ID
  2. 在对象构造函数中,我创建了一个新的ObjectId并将其分配给字段。
  3. 在更新对象时,我重新分配字符串id,以确保_id保持不变,并且更新了对象,而不是创建新的对象
 类似资料:
  • 所以我开始和Morphia一起工作,我遇到了一个奇怪的问题。 get(moviedetails.class,id) 我得到null 当我使用:

  • 简短说明: 我在将mongo DB中的文档读入具有泛型属性的java类时遇到了困难。错误显示 ...但是当我试着从数据库里读... ...我得到以下异常: 我确实发现了一些关于泛型和morphia的讨论,但老实说,我不知道如何将这些应用到我的问题上。 我在运行Morphia 1.5.8

  • 我正在使用SpringMVC开发一个REST服务,在那里我在类和方法级别有@刚需映射。 此应用程序当前配置为返回在web中配置的错误页面jsp。xml。 但是,我希望返回自定义JSON,而不是此错误页面。 通过在controller中编写此代码,我能够处理异常并为其他异常返回json,但不确定在url根本不存在的情况下如何以及在何处编写返回json的逻辑。 我试过@ControllerAdvice

  • 我在postgres数据库中有这样的数据 我想创建rest api来像这样返回嵌套的json ] 目前,我只能为每条记录返回普通json,但我想分组并返回嵌套json,如有任何帮助,将不胜感激 下面是我的代码model.py views.py 序列化程序.py

  • 我发现了这篇文章,其中讨论了是否应该建立文档之间的引用。我想注释我的类,以便在文档中创建引用: 这里,列表先决条件的对象具有对列表BS的对象的引用。在中可能吗?它是如何被称为的(我无法使用关键字“嵌入引用”和“文档内引用”找到任何信息。)Morphia的解决方案会是什么样子? 编辑:我知道引用注释,但它似乎引用了anoter集合,而不是同一个文档中的对象列表。我只想确保序列化的java对象被正确地

  • 现在我想做的是将一个GeoStamps列表推送到Mongo中的GeoStamp数组,在那里我首先过滤跟踪器的ObjectId或它的iCAN。然后在文档中发现我需要按日过滤,所以我不会将GeoStamp列表添加到分布在多个日期的多个GeoStamp数组中。 我想可以用下面的方法来做: 我的查询(是的,我知道retrievedFields是不推荐的,我不想使用它,但这是我最接近工作的解决方案): 写入