https://www.cnblogs.com/sanboshi/p/9378666.html
各注解使用
https://www.cnblogs.com/wjh123/p/8745473.html
自定义验证
http://daobin.wang/2017/06/Spring-Validation/
参数实体添加注解:
/**
- 月结算单生成请求参数 实体
- @author lhj
- @version 1.0.0
- @date 2020/09/05
*/
public class IssueRequestParams {
/** 结算日期(yyyymm) */
@Size(message="结算日期:必须输入项目且必须是年月(YYYYMM)格式{max}个字符长度", max=6, min=6)
private String asDate;
/** 核算日期(yyyymm) */
@Size(message="核算日期:必须输入项目且必须是年月(YYYYMM)格式{max}个字符长度", max=6, min=6)
private String acDate;
/** 付款方智能账户id */
@NotEmpty(message = "付款方智能账户id")
@NotNull(message = "付款方智能账户id")
private String pAccountId;
/** 付款方智能账户名 */
@NotEmpty(message = "付款方智能账户名")
@NotNull(message = "付款方智能账户名")
private String pAccountName;
/** 付款方银行卡号 */
@NotEmpty(message = "付款方银行卡号")
@NotNull(message = "付款方银行卡号")
private String pBkaccAccno;
/** 付款方是否招行(默认:Y Y:招行 , N:非招行) */
@NotNull(message = "付款方是否招行")
@NotEmpty(message = "付款方是否招行")
private String pBnkFlg;
/** 智能账户ID */
@NotBlank(message="智能账户ID")
private String accountId;
/** 账户姓名 */
private String accountName;
@NotNull(message="项目ID")
@Min(message="项目ID:必须参数,且大于等于{value}", value=1)
private int projectId;
/** 结算状态(默认 0 0.未对账 1.对账中 2.已对账 3.结算中 4.已结算) */
@Range(message="结算状态:必须参数,且大于等于{min}小于等于{max}", min=1, max=4)
private byte state;
/** 分账日期(yyyymm) */
@NotBlank(message="分账日期")
@Size(message="分账日期必须是年月格式{max}个字符长度", max=6, min=6)
private String acdate;
/** 用途 */
private String nusage;
/** 请求账单其他金额列表 */
@Valid // 这个注解说明,对这个列表中的也要进行验证。
private List<ACSettlementMonth> list;
// 省略
}
导入包:
import javax.validation.Valid;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
依赖(Sringboot依赖,已经包含验证包):
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
请求写法:
@PostMapping("/api/v1/ac_settlement/issue")
public Result
进行验证:
// 参数验证
@SuppressWarnings("unchecked")
Result
if (null != check) {
return check;
}
共通方法:
/**
- 参数验证
- 没有错误时返回 null
- @param bindingResult
- @return
*/
protected Result<?> validParams(BindingResult bindingResult) {
if (bindingResult.hasErrors()) {
FieldError fieldError = bindingResult.getFieldError();
return processBindingError(fieldError);
}
return null;
}
/**
- 返回信息格式化
- 根据注解自定义返回信息和错误码
- @param fieldError
- @return
*/
private Result<?> processBindingError(FieldError fieldError) {
Result<?> result = new Result<Object>();
String code = fieldError.getCode();
LOGGER.debug("validator error code: {}", code);
switch (code) {
case "NotEmpty":
result.setCode(ValidataEnum.NOT_EMPTY.getCode());
result.setMessage(fieldError.getDefaultMessage() + ":" + ValidataEnum.NOT_EMPTY.getMsg());
return result;
case "NotNull":
case "NotBlank":
result.setCode(ValidataEnum.NOT_NULL.getCode());
result.setMessage(fieldError.getDefaultMessage() + ":" + ValidataEnum.NOT_NULL.getMsg());
return result;
case "Min":
case "Max":
case "Size":
result.setCode(ValidataEnum.MAX_MIN.getCode());
result.setMessage(fieldError.getDefaultMessage() + ":" + ValidataEnum.MAX_MIN.getMsg());
return result;
default:
result.setCode(ValidataEnum.UN_DEFINE.getCode());
result.setMessage(fieldError.getDefaultMessage() + ":" + ValidataEnum.UN_DEFINE.getMsg());
return result;
}
}
自定义错误信息枚举类:
/**
- 请求参数验证错误信息枚举类
- @author lhj
- @version 1.0.0
- @date 2020/09/03
*/
public enum ValidataEnum {
NOT_NULL("必须参数,必须传递,不能为NULL", -1001),
NOT_EMPTY("必须参数,不能为空", -1002),
MAX_MIN("", -1003),
SIZE("", -1004),
UN_DEFINE("未定义错误信息,请定义。", -9999),
;
private String msg;
private int code;
private ValidataEnum(String argMsg, int argCode) {
this.msg = argMsg;
this.code = argCode;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
}
错误示例:
{
"code": -1001,
"message": "智能账户ID:必须参数,必须传递,不能为NULL",
"data": null
}