重复使用相同的域对象进行获取和发布



假设我有一个学生对象

public class Student{
private long id;
private string name;
private List<string> courses
}

在典型的获取请求中,要让学生我将学生对象发送给客户。

如果提出请求通过添加或删除课程或邮政请求来创建学生记录来修改学生对象的请求,我只需要从客户端接收学生。ID和课程列表。<<<<<<<<<<

我的问题是,我可以在不包括名称的情况下从看台或发布请求中的客户端发送同一学生对象,或者name = null?还是我应该创建一个单独的域对象,例如:

    public class StudentReponse
{
       private long id;
       private List<string> courses;
}

我猜我的通用问题是,我们应该将REST API中的请求和响应对象分开吗?或用于代码可用性尝试在两个方向上使用相同的域对象?

我们应该将REST API中的请求和响应对象分开吗?

是 - 它允许独立发展请求和响应。如果您在发布创建时遵循REST实践,则应返回201 - created和新创建对象的ID。

如果客户端需要有关它的详细信息,则客户可以使用ID 获取完整的资源表示。

还考虑不要直接通过休息来暴露域对象。例如,具有域实体对象 - 它可能具有与持久性层相关的一些字段,例如数据库ID,createon,createby-等。不应将这些字段发送给客户端。使用一个简单的StudentDto(StudentResponse,students reversed to您想称呼它(表示,该表示只有这些字段,这些字段对客户感兴趣。

将域和响应对象保持分开,还使您能够分别发展它们或更改数据表示。想象一下,您有一个JPA实体,并且在同一类中同时使用JPA和Jackson注释 - 这很混乱,很难阅读和维护。

更新:

如果您使用的是要修改客户并将其发送回服务器的同一对象,我想您可以重复使用它并像这样对其进行建模:

get

@GetMapping("/students/{id}")
public StudentDto getStudent(@PathVariable long id) {
    return studentService.get(id);
}

update(replace(

@PutMapping("/students/{id}/")
public ResponseEntity updateStudent(@PathVariable long id, @RequestBody StudentDto student) {
    return new ResponseEntity(studentService.replaceStudent(id, student), HttpStatus.OK);
}

更新(部分更新(

@PostMapping("/students/{id}/")
public ResponseEntity updateStudent(@PathVariable long id, @RequestBody StudentDto student) {
    return new ResponseEntity(studentService.updateStudent(id, student), HttpStatus.OK);
}

相关内容

  • 没有找到相关文章

最新更新