前言:
今天我们对“java校验时间格式”可能比较看重,小伙伴们都想要知道一些“java校验时间格式”的相关内容。那么小编同时在网上搜集了一些对于“java校验时间格式””的相关知识,希望姐妹们能喜欢,大家快快来学习一下吧!前后端不可避免的会有日期或者时间戳的交互传递,到底用什么类型进行传递日期好那就见仁见智了,个人还是感觉字符串用着方便,特别有了Java8开始支持的LocalDateTime、LocalDate、以及Spring的ConstraintValidator接口,字符串用起来更是得心应手。
1、首先创建一个注解类
package com.falcon.design.aop.annotation;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(value = {ElementType.FIELD, ElementType.PARAMETER})@Retention(RetentionPolicy.RUNTIME)@Constraint(validatedBy = DateTimeValidator.class)public @interface DateStrFormat { String message() default "日期格式错误"; String format() default "yyyy-MM-dd"; Class<?>[] groups() default {}; Class<? extends Payload>[] payload() default {};}
2、创建验证该注解的实现类
package com.falcon.design.aop.annotation;import javax.validation.ConstraintValidator;import javax.validation.ConstraintValidatorContext;import java.time.format.DateTimeFormatter;public class DateTimeValidator implements ConstraintValidator<DateStrFormat,String> { private DateStrFormat dateStrFormat; @Override public void initialize(DateStrFormat localDateTime) { this.dateStrFormat = localDateTime; } @Override public boolean isValid(String value, ConstraintValidatorContext context) { //如果注解的字段为空则不校验,直接返回true if(value == null || value.length() ==0){ return true; } String format = dateStrFormat.format(); //如果被注解字段值的长度和format不一致,则肯定校验不通过返回false if(value.length() != format.length()){ return false; } try{ DateTimeFormatter.ofPattern(format).parse(value); }catch (Exception e){ return false; } return true; }}
3、使用
Postman请求:
返回结果:
{ "timestamp": "2020-09-18T18:07:26.808+0000", "status": 400, "error": "Bad Request", "errors": [ { "codes": [ "DateStrFormat.user.time", "DateStrFormat.time", "DateStrFormat.java.lang.String", "DateStrFormat" ], "arguments": [ { "codes": [ "user.time", "time" ], "arguments": null, "defaultMessage": "time", "code": "time" }, { "arguments": null, "defaultMessage": "yyyyMMdd HH:mm:ss", "codes": [ "yyyyMMdd HH:mm:ss" ] } ], "defaultMessage": "日期格式错误", "objectName": "user", "field": "time", "rejectedValue": "2020/09/19", "bindingFailure": false, "code": "DateStrFormat" } ], "message": "Validation failed for object='user'. Error count: 1", "path": "/hello"}
可以看到优雅的校验住了字符串类型的时间格式,但是不太优雅的地方在于这个json会原样的返回到前端,并不是前端想要的结果,我们希望只返回字符串类型错误就行了,这个问题我们留在下文探讨。
原创不易,产生共鸣的朋友不妨关注赞赏支持,老衲将不甚感激!
版权声明:
本站文章均来自互联网搜集,如有侵犯您的权益,请联系我们删除,谢谢。
标签: #java校验时间格式