接口参数验证
大约 1 分钟
接口参数校验我们可以借助 Spring Boot Validation
来完成。虽然它可以用在任何地方,但我们推荐在 controller
中使用。
依赖引入
在需要进行验证的模块引入以下依赖。这里实现的异常拦截器,会拦截参数验证的异常后返回我们的通用格式的消息。
<dependency>
<groupId>com.simperfect.commons</groupId>
<artifactId>simperfect-commons-validation</artifactId>
</dependency>
如果需要在通用 pojo
库中使用,那么只需引入以下依赖,不需要引入 simperfect-commons-validation
,因为在 pojo
中我们只是使用 validation
的注解。
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
</dependency>
基础使用
- 我们要现在 VO 中使用注解进行参数验证。 我这里使用的
jakarta.validation.constraints.NotNull
注解,这个注解可以不写返回消息内容,系统会有个默认返回消息。
import jakarta.validation.constraints.NotNull;
public class StartProcessInstanceVO {
@NotNull
private Integer categoryId;
@NotNull
private Long wfDefinitionId;
}
- 在
controller
中使用@Validated
注解来开启参数校验,然后使用@Valid
注解来校验参数。
import com.simperfect.bp.workflow.commons.vo.runtime.StartProcessInstanceVO;
import com.simperfect.commons.util.ResultUtils;
import com.simperfect.commons.vo.ResultVO;
import jakarta.validation.Valid;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@Validated
@RestController
@RequestMapping("/runtime")
public class RuntimeController {
@PostMapping("/start_process_instance")
public ResultVO<?> startProcessInstance(@RequestBody @Valid StartProcessInstanceVO startProcessInstanceVO) {
return ResultUtils.success();
}
}
- 最终的返回结果如下
{
"status": 40000,
"msg": "不能为null",
"errMsg": "wfDefinitionId",
"data": null
}
其他用法
在 jakarta.validation.constraints
包下的注解均可用,请自行探索。