修改接口,字段的内容允许清空,避免歧义,参数校验:@NotNull

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

参数:

修改接口,字段的内容允许清空,避免歧义,参数校验:@NotNull_第1张图片

修改接口,字段的内容允许清空,避免歧义,参数校验:@NotNull_第2张图片

结果:

修改接口,字段的内容允许清空,避免歧义,参数校验:@NotNull_第3张图片

5.2. 传的是空字符串

参数:

修改接口,字段的内容允许清空,避免歧义,参数校验:@NotNull_第4张图片

结果:

修改接口,字段的内容允许清空,避免歧义,参数校验:@NotNull_第5张图片

你可能感兴趣的:(Spring,Boot,spring,boot)