当前位置: 首页 > news >正文

教育类网站开发费用艺术品展览公司网站建设

教育类网站开发费用,艺术品展览公司网站建设,在网站社保减员要怎么做,各类微网站建设SpringBoot参数校验Validated、Valid#xff08;javax.validation#xff09; 一、应用场景 在实际开发中#xff0c;前端校验并不安全#xff0c;任何人都可以通过接口来调用我们的服务#xff0c;就算加了一层token的校验#xff0c;有心人总会转空子#xff0c;来传…SpringBoot参数校验Validated、Validjavax.validation 一、应用场景 在实际开发中前端校验并不安全任何人都可以通过接口来调用我们的服务就算加了一层token的校验有心人总会转空子来传各式各样错误的参数如果后端不校验导致数据库数据混乱、特别是关于金额的数据可能一个接口把公司都给干倒了 二、原生参数校验 0、返回类可以不用看 /*** 用于返回* param T*/ ApiModel(统一返回类) public class ResultsT {public static final String ERROR 500;public static final String SUCCESS 200;/*** 返回码*/ApiModelProperty(返回码,正确码为200)private String resCode ;/*** 返回消息*/ApiModelProperty(返回消息)private String msg ;/*** 返回实体*/ApiModelProperty(返回实体)private T obj;public static T ResultsT success(){return success(SUCCESS,成功,null);}public static T ResultsT success(String msg){return success(SUCCESS,msg,null);}public static T ResultsT success(T obj){return success(SUCCESS,成功,obj);}public static T ResultsT success(String msg,T obj){return success(SUCCESS,msg,obj);}public static T ResultsT success(String resCode,String msg,T obj){ResultsT result new ResultsT();result.setResCode(resCode);result.setMsg(msg);result.setObj(obj);return result;}public static T ResultsT failed() {return failed(ERROR,失败,null);}public static T ResultsT failed(String msg) {return failed(ERROR,msg,null);}public static T ResultsT failed(String msg,T obj) {return failed(ERROR,msg,obj);}public static T ResultsT failed(String resCode,String msg) {return failed(resCode,msg,null);}public static T ResultsT failed(Integer resCode,String msg) {return failed(String.valueOf(resCode),msg);}public static T ResultsT failed(String resCode,String msg,T obj) {ResultsT result new ResultsT();result.setResCode(resCode);result.setMsg(msg);result.setObj(obj);return result;}public static T ResultsT failedNoPermission() {return failed(90005,没有权限);}public static T ResultsT failedNoPermission(String msg) {return failed(90005,msg);}public static T ResultsT failedParameterException() {return failed(90004,参数异常);}public static T ResultsT failedParameterException(String msg) {return failed(90004,msg);}public static T ResultsT failedLoginException() {return failed(90002,登录失败);}public static T ResultsT failedLoginException(String msg) {return failed(90002,msg);}public String getResCode() {return resCode;}public void setResCode(String resCode) {this.resCode resCode;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg msg;}public T getObj() {return obj;}public void setObj(T obj) {this.obj obj;}Overridepublic String toString() {return Results{ resCode resCode \ , msg msg \ , obj obj };} }1、实体类 ApiModel(测试 validation 入参) Data public class TestDto {ApiModelProperty(value 名字,required true)private String name;ApiModelProperty(value 年龄,required true)private Integer age;ApiModelProperty(value 爱好,required true)private ListString hobbies; }2、服务层为了方便我直接跟Controller写在一起了 我们可以看见如果参数过大要一个一个筛选条件十分浪费时间 RestController // lombok 的日志注解 Slf4j // swagger 的注解 Api(测试) public class TestController {PostMapping(/testValidation)// swagger 的注解ApiOperation(测试 validation)public Results testValidation(RequestBody TestDto dto){try {log.info(test 入参 dto{},dto);// 这要一个一个的塞很浪费时间if (dto.getName() null || .equals(dto.getName().trim())){return Results.failed(名字不能为空);}if (dto.getAge() null){return Results.failed(年龄不能为空);}if (dto.getHobbies() null || dto.getHobbies().size() 0){return Results.failed(爱好不能为空);}return Results.success();} catch (Exception e) {log.error(test 报错,e);return Results.failed();}} }三、使用 javax.validation 进行参数校验 1、导包 dependencygroupIdjavax.validation/groupIdartifactIdvalidation-api/artifactIdversion2.0.1.Final/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-validation/artifactId/dependency2、全局异常处理类 RestControllerAdvice public class ExceptionControllerAdvice {ResponseStatus(HttpStatus.OK)ExceptionHandler(MethodArgumentNotValidException.class)public Results MethodArgumentNotValidExceptionHandler(MethodArgumentNotValidException e) {// 从异常对象中拿到ObjectError对象BindingResult br e.getBindingResult();if (br.hasFieldErrors()) {ListFieldError fieldErrorList br.getFieldErrors();ListString errors new ArrayList(fieldErrorList.size());for (FieldError error : fieldErrorList) {errors.add(error.getField() : error.getDefaultMessage());}// 然后提取错误提示信息进行返回return Results.failed(errors.toString());}// 然后提取错误提示信息进行返回return Results.failed(校验错误);}}如果不加这个全局处理类只会给前端返回这样的参数 加上全局配置类 3、实体类 ApiModel(测试 validation 入参) Data public class TestDto {ApiModelProperty(value 名字,required true)// 适用于 String 类型的数据上加了NotBlank 注解的参数不能为 Null 且 trim() 之后 size 0必须有实际字符NotBlank(message 名字不能为空)private String name;ApiModelProperty(value 年龄,required true)NotNull(message 年龄不能为空)// 适用于基本数据类型(IntegerLongDouble等等)当 NotNull 注解被使用在 String 类型的数据上则表示该数据不能为 Null但是可以为 Emptyprivate Integer age;ApiModelProperty(value 爱好,required true)// 适用于 String、Collection集合、Map、数组等等加了NotEmpty 注解的参数不能为 Null 或者 长度为 0NotEmpty(message 年龄不能为空)private ListString hobbies; }4、服务层为了方便我直接跟Controller写在一起了 必须要加上 Valid 或者 Validated后续我会讲解这两个有什么不同目前来说都可以用但推荐用 Validated RestController Slf4j Api(测试) public class TestController {PostMapping(/testValidation)ApiOperation(测试 validation)// 必须要加上 Valid 或者 Validatedpublic Results testValidation(// 必须要加上 Valid 或者 ValidatedValid RequestBody TestDto dto){try {log.info(test 入参 dto{},dto);return Results.success();} catch (Exception e) {log.error(test 报错,e);return Results.failed();}} }6、测试 四、javax.validation 包下其它常用的校验注解 这个颜色的是常用的 注解含义Null任何类型 必须为nullNotBlank字符串、字符 字符类不能为null且去掉空格之后长度大于NotNull任何类型 不能为nullLength(min 6, max 8, message “密码长度为6-8位。”)字符串的大小必须在指定的范围内NotEmpty适用于 String、Collection集合、Map、数组等等加了NotEmpty 注解的参数不能为 Null 或者 长度为 0AssertTrueBoolean、boolean 布尔属性必须是trueAssertFalseBoolean、boolean 布尔属性必须是falseMin(10)必须是一个数字其值必须大于等于指定的最小值我这填的是10整型Max(10)必须是一个数字其值必须小于等于指定的最大值我这填的是10整型DecimalMin(“10”)必须是一个数字其值必须大于等于指定的最小值我这填的是10字符串可以是小数DecimalMax(“10”)必须是一个数字其值必须小于等于指定的最大值我这填的是10字符串可以是小数Size(max 10,min 1)集合 限定集合大小Digits(integer 3, fraction 2, message “请输入有效的数字”)private double number;Digits 用于验证数字的整数位数和小数位数。该注解的 integer 和 fraction 属性分别用于指定整数位数和小数位数的限制。integer 属性用于指定数字的最大整数位数。它是一个整数值表示数字允许的最大整数位数。例如integer 3 表示数字最多可以有三位整数部分。fraction 属性用于指定数字的最大小数位数。它是一个整数值表示数字允许的最大小数位数。例如fraction 2 表示数字最多可以有两位小数部分。Past时间、日期 必须是一个过去的时间或日期Future时期、时间 必须是一个未来的时间或日期Email字符串 必须是一个邮箱格式Pattern(regexp “[a-zA-Z]*”, message “密码不合法”)字符串、字符 正则匹配字符串Range(max 150, min 1, message “年龄范围应该在1-150内。”)数字类型原子和包装 限定数字范围长整型URL(protocol,host, port,regexp, flags)被注释的字符串必须是一个有效的urlCreditCardNumber被注释的字符串必须通过Luhn校验算法银行卡信用卡等号码一般都用Luhn计算合法性ScriptAssert(lang, script, alias)要有Java Scripting API 即JSR 223 (“Scripting for the JavaTM Platform”)的实现SafeHtml(whitelistType, additionalTags)classpath中要有jsoup包 五、Validated 与 Valid 比较 1、文字讲解 Spring Validation验证框架对参数的验证机制提供了ValidatedSpring’s JSR-303规范是标准JSR-303的一个变种javax提供了Valid标准JSR-303规范配合BindingResult可以直接提供参数验证结果。 Valid属于javax.validation包下,是jdk给提供的 是使用Hibernate validation的时候使用 Validated是org.springframework.validation.annotation包下的,是spring提供的 是只用Spring Validator校验机制使用 说明java的JSR303声明了Valid这类接口而Hibernate-validator对其进行了实现 Validation对Valid进行了二次封装在使用上并没有区别但在分组、注解位置、嵌套验证等功能上有所不同这里主要就这几种情况进行说明。 在检验Controller的入参是否符合规范时使用Validated或者Valid在基本验证功能上没有太多区别。但是在分组、注解地方、嵌套验证等功能上两个有所不同 分组 Validated提供了一个分组功能可以在入参验证时根据不同的分组采用不同的验证机制这个网上也有资料不详述。Valid作为标准JSR-303规范还没有吸收分组的功能。 注解地方 Validated用在类型、方法和方法参数上。但不能用于成员属性field Valid可以用在方法、构造函数、方法参数和成员属性field上 所以可以用Valid实现嵌套验证 总结 Valid 和 Validated 两者都可以对数据进行校验待校验字段上打的规则注解NotNull, NotEmpty等都可以对 Valid 和 Validated 生效 Valid 进行校验的时候需要用 BindingResult 来做一个校验结果接收。当校验不通过的时候如果手动不 return 则并不会阻止程序的执行 Validated 进行校验的时候当校验不通过的时候程序会抛出400异常阻止方法中的代码执行这时需要再写一个全局校验异常捕获处理类然后返回校验提示。 总体来说Validated 使用起来要比 Valid 方便一些它可以帮我们节省一定的代码并且使得方法看上去更加的简洁。 2、代码讲解groups属性 在开发中新增、修改两个接口一般关系就在于新增时ID可以为空修改时ID不能为空那我们如果要使用 validation 用于参数校验创建两个实体类就非常的不划算这时 ①、创建一个update接口 import javax.validation.groups.Default;public interface Update extends Default { }②、修改实体类 ApiModel(测试 validation 入参) Data public class TestDto {ApiModelProperty(value ID,required true)// 新增时ID为空修改时ID不能为空NotNull(message ID不能为空,groups Update.class)private Integer id;ApiModelProperty(value 名字,required true)NotBlank(message 名字不能为空)private String name; }③、服务层为了方便我直接跟Controller写在一起了 RestController Slf4j Api(测试) public class TestController {PostMapping(/testAdd)ApiOperation(测试 新增)public Results testAdd(Validated RequestBody TestDto dto){try {log.info(testAdd 入参 dto{},dto);return Results.success();} catch (Exception e) {log.error(testAdd 报错,e);return Results.failed();}}PostMapping(/testUpdate)ApiOperation(测试 新增)public Results testUpdate(Validated(Update.class) RequestBody TestDto dto){try {log.info(testUpdate 入参 dto{},dto);return Results.success();} catch (Exception e) {log.error(testUpdate 报错,e);return Results.failed();}} }⑤、测试 新增 修改
http://www.pierceye.com/news/996885/

相关文章:

  • 网站建站 公司无锡搜索引擎营销的内容
  • 公司网站建设小知识单页网站是什么样子的
  • 大学网站建设排名深圳网站建设公司报价
  • 贵阳网站制作公司茶叶推广方案
  • 自适应 网站开发wordpress域名邮箱设置
  • 深圳网站设计网站制作非织梦做的网站能仿吗
  • 做网站可以使用免费空间吗沧州百姓网免费发布信息网
  • 关于阅读类网站的建设规划书使用密码访问wordpress文章
  • 做鲜花配送网站需要准备什么郑州官网网站优化公司
  • 评论网站建设个人网站域名名字
  • 郑州做茶叶的网站科技公司官网设计源代码
  • 武夷山住房和城乡建设部网站广东建设报网站
  • 怎样建设网站是什么样的免费软件不收费网站
  • 网站服务器如何管理seo知名公司
  • 网站单页别人是怎么做的预约挂号php网站ftp急着后台密码忘记了
  • 快速迁移网站wordpress网站很慢
  • 官方网站的作用邢台做wap网站费用
  • 梧州网站优化运营策划
  • 佛山网站快照优化公司免费好用的wordpress
  • 河南有名的做网站公司有哪些做设计找素材的+网站有哪些
  • 网站建设规划设计任务书网站开发的费用申请
  • 淮阳住房城乡建设局网站网页模板的作用
  • 知识问答网站开发不用编程做APP和响应式网站
  • 免费创建个人商城网站吗中国互联网前100名企业
  • 贵阳网站建设端觉有做数学题的网站吗
  • 网站备案格式网站开发工程师适合女生吗
  • 江门网站建设自助建站广播电台网站建设板块
  • 淮北市建设安全监督站网站文员工作内容
  • 先做网站还是app海北网站建设
  • 网站中转页怎么做做网页需要什么