首页 > 其他分享 >输入表单验证

输入表单验证

时间:2024-05-14 09:09:35浏览次数:25  
标签:info String 验证 private 表单 BindingResult logger pjp 输入

1.添加依赖

           <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-validation</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>

2.创建实体类,以下面举例

@Data
public class AddressBookDto {


    //用户id
    @NotNull
    @Min(2222)
    private Long userId;


    //收货人 或 雇员名称
    @NotNull
    @Size(min = 2, max = 30)
    private String consignee;


    //手机号
    private String phone;


    //性别 0 女 1 男
    private String sex;


    //省级区划编号
    private String provinceCode;


    //省级名称
    private String provinceName;


    //市级区划编号
    private String cityCode;


    //市级名称
    private String cityName;


    //区级区划编号
    private String districtCode;


    //区级名称
    private String districtName;


    //详细地址
    private String detail;


    //标签 比如 公司、家
    private String label;

    //是否默认 0 否 1是
    private Integer isDefault;


    //是否删除

    private Integer isDeleted;
}

3.在controller代码里面加入BindingResult bindingResult,在要验证的实体中前加@Valid

    @PostMapping("/save")
    public Result<AddressBook> save(@Parameter(description = "addressBookDto")
                                        @RequestBody @Valid AddressBookDto addressBookDto, BindingResult bindingResult) {
        AddressBook addressBook = new AddressBook();
        BeanUtils.copyProperties(addressBookDto, addressBook);
        return Result.success(addressBookService.save(addressBook));
    }

4.在AOP中加入以下代码

@Aspect
@Component
public class WebLogAspect {

    @Autowired
    ObjectMapper objectMapper;
    Logger logger = LoggerFactory.getLogger(WebLogAspect.class);

    @Around("execution(* com.integration.scaffold.relationaldataaccess.mysql.controller.*.*(..))")
    public Object doBasicProfiling(ProceedingJoinPoint pjp) throws Throwable {
        // 记录调用的方法和参数
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        Long startTime = System.currentTimeMillis();
        logger.info("请求ip是:{}", request.getRemoteAddr());
        logger.info("请求url是: {}", request.getRequestURL().toString());
        logger.info("请求方法是: {}", request.getMethod());
        logger.info("处理Method:{},请求方法:{}", pjp.getSignature().getDeclaringTypeName(), pjp.getSignature().getName());
        logger.info("请求参数是:{}", pjp.getArgs());
        for (Object obj : pjp.getArgs()) {
            if (obj instanceof BindingResult) {
                BindingResult bindingResult = (BindingResult) obj;
                if (bindingResult.hasErrors()) {
                    List<ObjectError> errors = bindingResult.getAllErrors();
                    StringBuffer sb = new StringBuffer();
                    for (ObjectError objectError : errors) {
                        sb.append(Arrays.stream(objectError.getArguments()).findFirst() + "---" +
                                objectError.getCode() + "---" + objectError.getDefaultMessage());
                    }
                    logger.info("返回结果是:{}", Result.fail(sb.toString()));
                    Long endTime = System.currentTimeMillis();
                    logger.info("执行方法耗时:{}秒", (endTime - startTime) / 1000.0);
                    return Result.fail(sb.toString());

                }
            }
        }
        Object retVal = pjp.proceed();
        // stop stopwatch
        logger.info("返回结果是:{}", objectMapper.writeValueAsString(retVal));
        Long endTime = System.currentTimeMillis();
        logger.info("执行方法耗时:{}秒", (endTime - startTime) / 1000.0);
        return retVal;
    }
}

启动项目,进行测试

当不符合条件时:

当符合条件时:

 

 

点击比如@Min所在的包里面有很多的验证条件,都是可以使用的哦

标签:info,String,验证,private,表单,BindingResult,logger,pjp,输入
From: https://www.cnblogs.com/yunzhiliuandyunchaoliu/p/18190517

相关文章

  • 简单的自定义表单控件
    核心为onChang事件,赋值需要关注value <Form.Itemname='position'label="位置"style={itemStyle}><InputXYZ/></Form.It......
  • "Bios"是计算机系统中的基本输入输出系统(Basic Input/Output System),负责在计算机启动
    "Bios"是计算机系统中的基本输入输出系统(BasicInput/OutputSystem),负责在计算机启动时初始化硬件设备、检测系统资源,并启动操作系统。Bios开发人员是负责设计、开发和维护计算机系统的Bios软件的专业人员。工作内容:软件设计和开发:Bios开发人员负责设计和编写Bios软件,包......
  • 4-30V 输入、1.2A 固定输出同步降压驱动器
    产品描述 AP3462是一款支持宽电压输入的同步降压电源管理芯片,输入电压4-30V范围内可实现1.2A的连续电流输出。AP3462具有优秀的恒压特性。AP3462采用电流模式的环路控制原理,实现了快速的动态响应。AP3462工作开关频率为220kHz,具有良好的EMI特性。AP3462内置有......
  • 4-30V 输入、1.2A 固定输出同步降压驱动器
    产品描述 AP3462是一款支持宽电压输入的同步降压电源管理芯片,输入电压4-30V范围内可实现1.2A的连续电流输出。AP3462具有优秀的恒压特性。AP3462采用电流模式的环路控制原理,实现了快速的动态响应。AP3462工作开关频率为220kHz,具有良好的EMI特性。AP3462内置有......
  • 神器!使用Python 轻松识别验证码
    前言在我们进行自动化测试的过程中,免不了要在登录时遇到验证码,很多时候我们都是只能找开发要万能验证码或者暂时关闭验证码这个功能,但是有时候我们必须要验证码是否能够正常生成,所以在这个时候,我们需要做的就是输入验证码,但是验证码这个东西是随机生成的,不是每一次都一样,所以我......
  • 数据分享|python分类预测职员离职:逻辑回归、梯度提升、随机森林、XGB、CatBoost、LGB
    全文链接:https://tecdat.cn/?p=34434原文出处:拓端数据部落公众号分析师:ShilinChen离职率是企业保留人才能力的体现。分析预测职员是否有离职趋向有利于企业的人才管理,提升组织职员的心理健康,从而更有利于企业未来的发展。解决方案任务/目标采用分类这一方法构建6种模型对职......
  • 三分钟分享自定义表单系统开源的优势
    在数字化转型浪潮下,利用低代码技术平台、自定义表单系统开源的优势特点,可以助力企业实现高效办公,降低人工成本,从而进入流程化办公新时代。为了帮助大家了解相关信息,流辰信息与大家分享自定义表单系统开源的相关特点和优势,希望能帮助大家解决心中的疑问,更好地利用企业内部数据资源,......
  • 启动软件输入密码
    #硬编码的正确密码的哈希值(这只是一个示例,你应该使用更安全的方法来存储和验证密码)$correctPasswordHash="cc0c306017c7d88cb92009d56e2e31c1d2e2a97d989dc5c27cb8f65d69e8aad7"#替换为实际密码的哈希值#读取用户输入的密码$userPassword=Read-Host"pleaseinputI......
  • 自定义表单工作流的优势介绍
    当前,应用低代码技术平台可以助力企业提高效率,降低开发成本,实现个性化场景定制,因而越来越得到了客户的信赖与喜爱。很多客户朋友询问自定义表单工作流的优势和特点,为了帮助大家解决这个疑问,今天,就跟大家一起分享低代码技术平台以及自定义表单工作流的相关知识,相信从这些字里行间中......
  • shell-验证日期
    #!/bin/bash#PATH=.:$PATHexceedsDaysInMonth(){#给定月份名称和天数,如果指定的天数小于或等于该月份的最大天数,#函数返回0;否则,返回1.case$(echo$1|tr'[:upper:]''[:lower:]')injan*)days=31;;feb*)days=28;;mar*)days=31;;apr*)da......