参数校验有
javax.validation
可以网上查找,通过注解可以方便实现参数校验,下面的工具类自己写着玩,可以自己封装成注解形式
需要依赖:
1.(使用alibab的fastjson也可以,需要配置一下默认不去掉null键值对,这次用下面这个jackson依赖)
2.apache工具包
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-guava</artifactId>
<version>2.10.1</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.6</version>
</dependency>
代码:MustParamsIsNullOrNotUtil:
package com.ns.restaurant.util;
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.exc.InvalidFormatException;
import com.ns.restaurant.pojo.enums.ResponseCode;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.converter.HttpMessageNotReadableException;
import java.util.Map;
/**
* @ClassName:MustParamsIsNullOrNotUtil
* @Package:com.ns.restaurant.util
* @Description: com.ns.restaurant.util.MustParamsIsNullOrNotUtil: 校验必填参数工具类
* FIXME 使用方法: 例如:public TrunkResult testCatchingException(@RequestBody TestBo testBo) { }
* FIXME 参数实体类 testBo 中的必填参数字段名必须包含字段 must e.g. private String mustParam1;
* FIXME 在要校验的地方调用本工具类中的MustParamsIsNullOrNot方法 ,传入要校验的实体类 e.g. testBo ↑
* FIXME 示例: @PostMapping("/testCatchingException")
* public TrunkResult testCatchingException(@RequestBody TestBo testBo) {
* TrunkResult trunkResult = MustParamsIsNullOrNotUtil.MustParamsIsNullOrNot(testBo);
* if(ObjectUtils.isEmpty(trunkResult.getMsg())){
* // 自己的行为逻辑
* return TrunkResult.ok();
* }
* return trunkResult;
* }
* 调用示例:POST http://localhost:8866/dingding/testCatchingException
* Content-Type: application/json
* {
* "mustParam1": "bb",
* "mustParam2": "aa",
* "mustParam4": "9"
* }
* 调用结果 :
* {
* "status": 400,
* "msg": "mustParam3必填!",
* "data": null
* }
* @date:2021/11/4 9:57
* @author:南风
*/
@Slf4j
public class MustParamsIsNullOrNotUtil {
private static final String MUSTPERIOD = "must";
public static TrunkResult MustParamsIsNullOrNot(Object obj){
ObjectMapper mapper = new ObjectMapper();
String jsonStr;
try {
jsonStr = mapper.writeValueAsString(obj);
} catch (JsonProcessingException e) {
e.printStackTrace();
return TrunkResult.errorMsg(ResponseCode.INTERNAL_SERVER_ERROR);
}
TrunkResult trunkResult = new TrunkResult();
Map<String,Object> parameterMap = JSONObject.parseObject(jsonStr, Map.class);
for(String key:parameterMap.keySet()){
if(key.contains(MUSTPERIOD) ){
try {
if( StringUtils.isEmpty(parameterMap.get(key).toString())){
TrunkResult trunkResultError = new TrunkResult(400, key + "必填!",null);
return trunkResultError;
}
} catch (NullPointerException e) {
TrunkResult trunkResultCatched = new TrunkResult(400,key + "必填!",null);
return trunkResultCatched;
}
}
}
return trunkResult;
}
}
上面是工具类