前端传参,后端使用对象接收参数。
如何过滤前端或调用接口的人多传参数。
比如:
部门表里面有:
部门 ID,
上级部门 ID,
部门名称,
部门编号,
...等信息。
如果根据:
部门 ID 修改部门名称
,后端采用部门对象接受参数,如何过滤用户多传的参数,比如用户多传部门编号,导致部门编号也被更新。
由于 ORM 框架使用的是基于 Mybatis 的通用 mapper,更新数据是根据对象参数更新的
所以想在业务层做排除多余的参数,比如 new 一个空的部门对象,然后把需要的参数 set 进去,然后再传给通用 mapper 做更新。
但是觉得每个方法里面都 new 空对象 set 值也不是特别好。
有没有可以加个注解,可以只接收指定需要的参数,其他传过来的参数都过滤排除这种校验器。
使用 validator 的分组校验,目前是做参数校验,非必须参数看了也可以加 NULL 注解,但是这种要加太多的 Null 。
只用参数接收,可以避免接收到多余的参数。
1
wangyanrui 2020-07-16 16:12:19 +08:00
自己封装一下 ORM 的 Update 的执行逻辑,当 ORM 框架调用时,反射发现字段上有 XX 注解,则不执行更新操作
|
2
kop1989 2020-07-16 16:13:54 +08:00 1
java 才疏学浅,班门弄斧请见谅。
一般这种接口我都会单独声明接口类。 接口类里只有我允许的传参参数。 这样就能让前端传参和你真正的 domain 数据结构对象隔离,防止数据污染。 然后再实现一个 copy 方法,将变量名一样的字段克隆过去。 |
3
wysnylc 2020-07-16 16:14:58 +08:00
不要把 po 当成 vo 用
|
4
qq1004108488 2020-07-16 16:25:24 +08:00 1
为每个业务设计一个 dto 不就得了。非要一个对象里面写上全部字段,然后又说不要,实在无语。
|
6
cnzjl 2020-07-16 16:42:56 +08:00 1
如楼上所说,单独设计 dto 出来就好了,使用注解也能实现,但是貌似不太灵活
|
7
xiaoming1992 2020-07-16 17:37:02 +08:00 via Android 1
不直接使用前端传入的参数,而是构造一个对象接受参数后,根据自己的逻辑导出相应的参数。相当于一个中间件。
|
8
optional 2020-07-16 17:59:28 +08:00 1
api 层要有自己的 dto 啊,不管你叫它 xxO 或者 xxInput 或者 xxRequest.
至于你说的注解方式,其实也很简单啊。 增加一个参数注解 @RequestInput("xxx") 之类的,然后拦截器处理下就完事了。 |
9
lihongming 2020-07-17 02:48:24 +08:00 via iPhone
看到这个需求就想到 TypeScript 的 interface,可惜 Java 没有
|