我有一个在数据库中管理的实体和一个控制器,它在这个实体上提供一些CRUD操作。
实体中的某些字段不应由使用REST API的前端更改。我只是想忽略这个不可更改字段的值,而是使用DB中的值。
到目前为止,我在我的控制器方法中执行了此操作,在我对实体进行进一步处理之前调用了该方法。但这种方法对我来说很糟糕,所以我寻找其他解决方案。
如何将此预处理从Controller中移出来?
答案 0 :(得分:1)
这是我能想到的解决方案:
您可以创建像MyObjVm
这样的视图模型类,其中包含MyObj
实体类的字段子集,这些字段可以更改。在您的控制器中,您可以使用MyObjVm
对象,如下所示:
@RequestMapping(//...)
public String method(Model model, @RequestBody MyObjVm myObjVm) {
// ...
// populate the MyObj entity from myObjVm so that only the changeable fields are consumed and assigned.
}
以上显示了您如何从前端使用JSON。
如果您想做相反的操作,只需返回MyObjVm
,其中的字段将由MyObj
的可更改字段填充。您的前端需要有一个相应的JS对象来使用返回的JSON。
如何将此预处理从Controller中移出来?
因此,需要离开控制器的处理几乎就是视图模型和实体之间的转换。您可以创建一个专门用于执行此操作的帮助程序类方法。