博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring mvc controller中的参数验证机制(二)
阅读量:4966 次
发布时间:2019-06-12

本文共 4211 字,大约阅读时间需要 14 分钟。

这里我们介绍以下自定义的校验器的简单的使用示例

一、包结构和主要文件

二、代码

1.自定义注解文件MyConstraint

package com.knyel.validator;import javax.validation.Constraint;import javax.validation.Payload;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;@Target({ElementType.METHOD,ElementType.FIELD})//注解可以标注在什么元素上@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = MyConstraintValidator.class)public @interface MyConstraint {    String message();    Class
[] groups() default {}; Class
[] payload() default {};}

2.自定义校验逻辑文件MyConstraintValidator

package com.knyel.validator;import com.knyel.service.HelloKnyel;import org.springframework.beans.factory.annotation.Autowired;import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;//ConstraintValidator
//A参数:表示要验证的注解//T参数:表示要验证的东西是什么类型public class MyConstraintValidator implements ConstraintValidator
{ @Autowired HelloKnyel helloKnyel; @Override public void initialize (MyConstraint myConstraint){ //校验器初始化的时候做的一些工作 System.out.println("myvalidator init"); } /* 真正的校验逻辑 Object o :传进来的校验的值 ConstraintValidatorContext constraintValidatorContext :校验的上下文 */ @Override public boolean isValid (Object value, ConstraintValidatorContext constraintValidatorContext){ //处理校验逻辑 helloKnyel.welcome("knyel"); System.out.println(value); //true代表校验成功,false代表校验失败 return false; }}

3.在2中isValid方法中调用的校验逻辑业务HelloKnyelImpl及接口

package com.knyel.service;public interface HelloKnyel {    String welcome(String name);}

 

package com.knyel.service.impl;import com.knyel.service.HelloKnyel;import org.springframework.stereotype.Service;@Servicepublic class HelloKnyelImpl implements HelloKnyel {    @Override    public String welcome (String name){        System.out.println("welcome");        return "hello knyel";    }}

4.待校验的实体

package com.knyel.dto;import com.fasterxml.jackson.annotation.JsonView;import com.knyel.validator.MyConstraint;import org.hibernate.validator.constraints.NotBlank;import javax.validation.constraints.Past;import java.util.Date;public class User {    public interface UserSimpleView {};    public interface UserDetailView extends UserSimpleView {};    private String id;    @MyConstraint(message = "测试校验器")    private String username;    @NotBlank(message="密码不能为空")    private  String password;    @Past(message = "生日必须是过去的时间")    private Date birthday;    @JsonView(UserSimpleView.class)    public String getUsername (){        return username;    }    public void setUsername (String username){        this.username = username;    }    @JsonView(UserDetailView.class)    public String getPassword (){        return password;    }    public void setPassword (String password){        this.password = password;    }    @JsonView(UserSimpleView.class)    public String getId (){        return id;    }    @JsonView(UserSimpleView.class)    public void setId (String id){        this.id = id;    }    public Date getBirthday (){        return birthday;    }    public void setBirthday (Date birthday){        this.birthday = birthday;    }    @Override    public String toString (){        return "User{" + "id='" + id + '\'' + ", username='" + username + '\'' + ", password='" + password + '\'' + ", birthday=" + birthday + '}';    }}

5.controller

@PutMapping("/{id:\\d+}")    public User update (@Valid @RequestBody User user, BindingResult errors){        if (errors.hasErrors()) {            errors.getAllErrors().stream().forEach((ObjectError error) ->{//                FieldError fieldError=(FieldError) error;//                String message=fieldError.getField()+":"+fieldError.getDefaultMessage();                System.out.println(error.getDefaultMessage());            });        }        System.out.println(user.getId());        System.out.println(user.getUsername());        System.out.println(user.getPassword());        System.out.println(user.getBirthday());        user.setId("1");        return user;    }

执行测试用例后

myvalidator initwelcomeknyel测试校验器1

 

转载于:https://www.cnblogs.com/knyel/p/7912496.html

你可能感兴趣的文章
【LaTeX】E喵的LaTeX新手入门教程(1)准备篇
查看>>
highcharts曲线图
查看>>
extjs动态改变样式
查看>>
PL/SQL Developer 查询的数据有乱码或者where 字段名=字段值 查不出来数据
查看>>
宏定义
查看>>
笔记:git基本操作
查看>>
生成php所需要的APNS Service pem证书的步骤
查看>>
JavaWeb之JSON
查看>>
HOT SUMMER 每天都是不一样,积极的去感受生活 C#关闭IE相应的窗口 .
查看>>
windows平台上编译mongdb-cxx-driver
查看>>
optionMenu-普通菜单使用
查看>>
MVC3分页传2参
查看>>
2016-2017-2点集拓扑作业[本科生上课时]讲解视频
查看>>
appium(13)- server config
查看>>
IIS负载均衡-Application Request Route详解第六篇:使用失败请求跟踪规则来诊断ARR...
查看>>
管理信息系统 第三部分 作业
查看>>
[Leetcode Week13]Search a 2D Matrix
查看>>
查看端口占用cmd命令
查看>>
2019.01.17王苛震作业
查看>>
清除浮动
查看>>