1. 问题描述
修改接口,字段的内容允许清空,是否应该做参数校验?如何做参数校验?
2. 说明
2.1. 需要对字段进行校验。
因为不校验,字段可能不传,或者字段的值为null;这样无法判断出,这个字段对应的含义,是不修改
(默认逻辑),还是要修改为空
(业务中修改的逻辑)。
当逻辑为修改时,一个字段的值为
null
,默认的含义是,这个字段没有修改。ORM框架也是按照这个规则设计的,字段为null
,不更新字段。
2.2. 校验方法:@NotNull
正确的校验方法是使用 @NotNull
,字段必须传且不能为空指针null
,否则接口返回调用失败。
3. 字段清空逻辑
字段清空逻辑,对应着字段的值为空字符串
;
字段中的值不为空,则表示字段值修改为这个值。
这样就不会再产生歧义问题了。
4. 代码示例
4.1. 参数对象
package com.example.web.param;import javax.validation.constraints.NotNull;import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;@Data
@ApiModel("编辑账号Param")
public class AccountEditParam {@NotNull(message = "邮箱,不能为null。清空内容,请传空字符串")@ApiModelProperty("邮箱")private String email;}
4.2. 接口
@PostMapping("account")@ApiOperation("编辑账号(允许清空字段内容)")public void editAccount(@Valid @RequestBody AccountEditParam param) {// TODO 操作数据库,修改对应的字段。}
5. 结果示例
如果email字段,不传或者为null,接口返回调用失败;
如果email字段,传的是空字符串,接口调用成功,email字段修改为空字符串。
5.1. 不传或者为null
参数:
结果:
5.2. 传的是空字符串
参数:
结果: