博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
springboot~为Money类型添加最大值和最小值的注解校验
阅读量:6147 次
发布时间:2019-06-21

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

在spring框架里,为我们集成了很多校验注解,直接在字段上添加对应的注解即可,这些注解基本都是简单保留类型的,即int,long,float,double,String等,而如果你自己封装了新的类,那么如果要校验它,注解这块需要自己写一下,像money这个类型,如果希望对它进行校验,注解这块需要自己去写。

普通类型的注解校验

/**   * 编号.   */  @NotBlank(message = "部门编号不能为空。")  private String code;  /**   * 名称.   */  @NotBlank(message = "部门名称不能为空。")  private String name;

自定义的注解校验

一 注解类

import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;import javax.validation.Constraint;import javax.validation.Payload;/** * 最小值约束. */@Target({ElementType.METHOD, ElementType.FIELD})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = MinMoneyHandle.class)public @interface MinMoney {  /**   * message.   *   * @return   */  String message() default "{minMoney.message.error}";  /**   * min value.   *   * @return   */  double value() default 0;  /**   * group.   *   * @return   */  Class
[] groups() default {}; /** * payload. * * @return */ Class
[] payload() default {};}

二 处理类

import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;import org.javamoney.moneta.Money;/** * min handle. */public class MinMoneyHandle implements ConstraintValidator
{ MinMoney constraint; public void initialize(MinMoney constraint) { this.constraint = constraint; } /** * valid. * * @param value . * @param context . * @return */ public boolean isValid(Money value, ConstraintValidatorContext context) { return value != null && value.getNumber().doubleValue() >= constraint.value(); }}

三 使用,直接在实体上添加对应的注解即可,注解里的字段有自己的默认值,程序员也可以显示为他们赋值

@Builder@Getter@ToString@NoArgsConstructor@AllArgsConstructorpublic class UserInfo {  private String name;  private String email;  @MinMoney(value = 0, message = "金额不能小于0.")  @MaxMoney(value = 10, message = "金额不能大于10.")  private Money price;}

然后通过WebClientTest进行测试即可

@RunWith(SpringRunner.class)@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)public class ValidateTest {  @Autowired  WebTestClient webTestClient;  @Test  public void test() {    UserInfo entity = UserInfo.builder()        .price(Money.of(100, "CNY"))        .build();    val obj = webTestClient.post()        .uri("/add")        .body(BodyInserters.fromObject(entity))        .exchange()        .expectStatus().isEqualTo(400)        .expectBody();  }}

感谢各位的阅读!

今天自己写出了这个注解,感谢很有成就,哈哈!

参考文章:

转载地址:http://csmya.baihongyu.com/

你可能感兴趣的文章
数据加密插件
查看>>
linux后台运行程序
查看>>
win7 vs2012/2013 编译boost 1.55
查看>>
IIS7如何显示详细错误信息
查看>>
Tar打包、压缩与解压缩到指定目录的方法
查看>>
配置spring上下文
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
登记申请汇总
查看>>
Office WORD如何取消开始工作右侧栏
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>
第一个应用程序HelloWorld
查看>>
(二)Spring Boot 起步入门(翻译自Spring Boot官方教程文档)1.5.9.RELEASE
查看>>
Java并发编程73道面试题及答案
查看>>
企业级负载平衡简介(转)
查看>>
ICCV2017 论文浏览记录
查看>>
科技巨头的交通争夺战
查看>>
当中兴安卓手机遇上农行音频通用K宝 -- 卡在“正在通讯”,一直加载中
查看>>
Shell基础之-正则表达式
查看>>