2017-04-01 71 views
0

我正在用Java创建一个RESTful服务。我的数据库层由JPA提供(也使用Spring数据存储库)。所以,我有一个包含持久化实体的包。我的RESTful API应该提供JSON格式的数据。REST风格的服务中的实体类架构

这里是我的控制器类的例子:

@Controller 
@RequestMapping("/category") 
public class CategoryController { 

    @RequestMapping(value = "{categoryId:\\d+}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON) 
    public @ResponseBody CategoryEntity getCategory(@PathVariable long categoryId) { 
     return = repo.findOne(categoryId); 
    } 

    @Autowired 
    private CategoryRepository repo; 
} 

所以,你看,我的getCategory()方法返回一个类型CategoryEntity,这是一个持久性实体的对象。我目前怀疑是否应该这样离开它,或者创建另一个包含业务实体类的包,实例化一个包,填充持久化实体中的数据并返回到我的getCategory()方法中。就目前而言,似乎没有区别,因为两个类将包含完全相同的字段并且会导致相同的JSON。但是如果事情随着我的应用程序的发展而发生某种变化会怎么样我想知道是否有最佳做法?

回答

0

我会建议创建另一个包(例如DTO),这里的原因:

  • 你可能不希望暴露实体到服务的所有领域(和潜在的,DB设计)。拥有一个附加图层让您只返回选定的字段。
  • 某些服务/消费者可能需要使用相同的enity类对字段进行不同的重命名或格式设置,否则难以实现。
  • 您可以轻松地添加/删除dto字段,而在实体进行任何更改(例如,服务可能需要一个实体对象与父实体名称或相关实体名称返回,在这种情况下,有另一班是方便)
+0

好点Darshan,谢谢。 – Andrew