2017-06-06 51 views
0

我有一个Spring Boot + Kotlin + Morphia的项目。部分更新Spring Boot和Kotlin中的REST

我需要添加我的实体的部分更新。我实际交的方法:

@PostMapping("update/") 
    fun updateStudent(@RequestBody @Valid student: Student, results: BindingResult): ResponseData<Student> { 

     if (results.hasErrors()) 
      return ResponseData(errors = results.errors) 


     if (!student.canEdit(login.user)) 
      return ResponseData() 


     student.save() 
     return ResponseData(data = student) 
    } 

我需要从数据库中读取学生,只更新sended领域

+0

应不是POST。如何区分将学生属性设置为NULL?我会说最好有一个请求参数的地图。从数据库中读取学生(例如,通过ID),然后通过地图更新Student的相应字段。最后将学生保存回数据库。 – StanislavL

+0

所有我的字段都是“不可空”的,所以我没有任何空值。 我读了关于“ModelAttribute”,它首先加载数据库中的元素,然后应用请求中的数据,但我不知道如何从它开始。 –

回答

0

有两件事情来实现。从DB中读取学生并从请求中复制学生的属性。

我发布的Java代码,但它是没有问题转换为科特林

Morphia morphia = new Morphia(); 
db = new Mongo(); 
Datastore ds = morphia.createDatastore(db, appname, user, pass.toCharArray()); 

morphia.map(Student.class); 
Student existing= ds.find(Student.class).field("id").equal(student.id).get(); 

然后你可以使用Apache的BeanUtils

http://commons.apache.org/proper/commons-beanutils/javadocs/v1.8.3/apidocs/org/apache/commons/beanutils/BeanUtils.html#copyProperties%28java.lang.Object,%20java.lang.Object%29

BeanUtils.copyProperties(existing, student); 

然后

existing.save(); 
+0

问题是我的所有变量都是“不可空”的,所以BeanUtils将所有数据替换为“默认数据” –

+0

这更像是商业逻辑问题。如何跳过空(默认值)字段?尝试解释你将如何手动进行。这就是为什么我最初建议具有关键价值的地图。如果某些内容没有发送,则不会覆盖现有值。 – StanislavL

相关问题