用注解搞定参数校验的问题————适用于后台

在平时的开发过程中,我们难免会对参数的数据类型进行校验。处理的方法也有很多种。

①:实现 RequestBodyAdvice里面的方法,可以通过IO流的方式进行处理,在请求之前进行操作。
②:通过annotation自定义注解进行处理。
③:通过Json反序列化进行处理。
④:通过全局校验类来处理。

总之方法有很多,那么此文章为大家讲解的是第③种,通过Json反序列化的时候进行校验处理

一,情景复现

比如在这里,我给priorityFlag给的是Integer类型,如图~~~·在这里插入图片描述
但其实,我用postman测的时候,结果并非所预期的。在这里插入图片描述
我请求体中 priority_flag给了一个6.5,结果创建成功了,且给我展示成了6,而且还 “操作成功" ,我实体类中给的明明是Integer,并没有给浮点型~~~这一顿操作有点凌乱啊~
原因是:当我们给浮点的时候,他在requestbody前就已经对浮点进行了转换,所以导致了这种情况的发生,这里打了个debug可以看一下

在这里插入图片描述

二、解决方法

其实校验的方法有很多种,我们这里就使用JsonDeserialize,Json反序列化的时候进行处理~

创建一个用于校验的class类,继承JsonDeserializer

 package com.fitmgr.resourcecenter.common.validator;

import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.DeserializationContext;
import com.fasterxml.jackson.databind.JsonDeserializer;
import com.fitmgr.resourcecenter.common.constant.MessageConstant;
import com.fitmgr.resourcecenter.exceptions.IllegalArgsException;

import java.io.IOException;

public class IntegerValidator extends JsonDeserializer<Integer> {
    @Override
    public Integer deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
        String  msg = jsonParser.getCurrentName();//获取字段的名称(可以不用,具体看业务)
        if(jsonParser.getFloatValue() > jsonParser.getIntValue()){//用浮点和整点去判断比较
            throw new IllegalArgsException(msg+":"+MessageConstant.INVALID_PARAMETER_TYPE);//错误则抛出异常提示
        }
        return jsonParser.readValuesAs(Integer.class).next();//正确则通过,
    }
}

写完这个类后,然后在我们需要进行校验的字段上加上这个注解并引用~
在这里插入图片描述
引用完成之后,我们就去开开心心的启项目~
启动之后,我们再去访问,结果会发现,达到了我们想要得效果,这次请求一个6.5不通过,直接抛出异常处理!!!皆大欢喜~~~

在这里插入图片描述 至此:Integer校验浮点型的就已经完成了。

三、额外延申

还有的情景是 实体类给的是Boolean 但是可以传数值型,这种情况处理方法也是一样的。


public class BooleanValidator extends JsonDeserializer<Boolean> {

    @Override
    public Boolean deserialize(JsonParser jsonParser, DeserializationContext deserializationContext) throws IOException, JsonProcessingException {
        return jsonParser.getBooleanValue() ? true : false;
    }
}

Boolean类型的只会返回 true 或 false,我们直接获取出他的BooleanValue值,直接return回去,其余的值我们一律给他异常处理

四、温馨提示:

该方法只适合于后台的校验,前台直接在页面进行操作,具体的操作看具体项目的业务需求场景!

感谢您阅读此文章!

如有不懂的,欢迎大家一起讨论学习!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值