Spring类RequestBody和MongoRepository

时间:2015-02-08 15:08:28

标签: java spring

我上课了:

class TestClass {
  @Id
  private ObjectId id;
  private ObjectId parentId;
  private String name;
  private String describe;
  private String privateData;
  public TestClass(ObjectId parentId, String name, String describe, String privateData) {
    this.parrentId = parrentId;
    this.name = name;
    this.describe = describe;
    this.privateDate = privateData;
  }
  // get/set methods...
}

我可以在MongoRepository和@RequestBody中使用此类吗?安全吗? parrentId和privateData是私有属性,RequestBody不必填充它们。

mongorepository:

public interface TestClassRepository extends MongoRepository<TestClass, String> {
    public TestClass findById(ObjectId id);
}

发布方法:

@RequestMapping(value="/testclass", method=RequestMethod.POST)
public void create(@RequestBody TestClass testClass) {
  testClass.setParentId(...);
  repo.insert(testClass);
}

例如:

{"name": "test", "describe": "test", "id": "54d5261a8314fe3c650d5b1d", "parentId": "54d5261a8314fe3c650d5b1d", "privateData": "WrongPrivateData"}

我该怎么做才能设置属性id,parentId,privateDate?

或者我需要为RequestBody创建新类吗?我不想要重复的代码。

1 个答案:

答案 0 :(得分:0)

为DAO和VO层使用单独的模型(视图)应该更好,更安全。如果您的模型目前看起来相同,那并不意味着它们将来会保持不变。您可以使用Dozer Mapping框架进行模型之间的映射。它简单,快速,安全。 如果你需要跳过mongotemplate映射中的某些字段,请使用@Transient注释。

P.S。你不需要findById方法,因为mongotemplate已经找到了使用key作为param的方法。 TestClass应该有一个空的构造函数。