springboot~为Money类型添加最大值和最小值的注…
2018-06-27 10:00:57来源:未知 阅读 ()
在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<? extends Payload>[] payload() default {}; }
二 处理类
import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; import org.javamoney.moneta.Money; /** * min handle. */ public class MinMoneyHandle implements ConstraintValidator<MinMoney, Money> { 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.getNumber().doubleValue() >= constraint.value(); } }
三 使用,直接在实体上添加对应的注解即可,注解里的字段有自己的默认值,程序员也可以显示为他们赋值
@Builder @Getter @ToString @NoArgsConstructor @AllArgsConstructor public 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://dolszewski.com/spring/custom-validation-annotation-in-spring/
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- springboot2配置JavaMelody与springMVC配置JavaMelody 2020-06-11
- SpringBoot 2.3 整合最新版 ShardingJdbc + Druid + MyBatis 2020-06-11
- 掌握SpringBoot-2.3的容器探针:实战篇 2020-06-11
- nacos~配置中心功能~springboot的支持 2020-06-10
- SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后 2020-06-10
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash