美文网首页
【20001】Java常用注解

【20001】Java常用注解

作者: 终极蚂蚁 | 来源:发表于2020-04-16 11:39 被阅读0次

    @JsonFormat

    • 后端返回Vo实体类,转化属性时间

    • 通过注解转化属性时间格式

      在时间属性上加上JsonFormat注解,然后就可以以自定义字符串形式返回格式了

      • pattern 为格式
      • timezone 时区
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;
    
    • 效果如下
    注解配置 效果

    @Valid

    • 用于参数校验

    • 可以配合的注解

      • @NotNull
      • @NotBlank
      • @Max

      如图

    可用的限制注解
    • 常用的三种使用方法介绍
      User参数类
    @Data
    public class User {
    
        @NotNull(message="id不能为空")
        private Integer id;
    
        @NotBlank(message="姓名不能为空")
        private String name;
    
        @Max(message="年龄不能大于120岁", value = 120)
        @Min(message="年龄不能小于0岁", value = 0)
        private Integer age;
    
        @Future
        private Date createTime;
    
    1. 直接在RequestBody里的参数类添加@Valid注解,需要统一处理异常
    @PostMapping("/test1")
    public Object test1(@RequestBody @Valid User user) {
        return "操作成功!";
    }
    
    1. 在RequestBody里的参数类添加@Valid注解,增加校验结果参数BindingResult
    @PostMapping("/test2")
    public Object test2(@RequestBody @Valid User user, BindingResult bindingResult) {
        // 参数校验
        if (bindingResult.hasErrors()) {
            String messages = bindingResult.getAllErrors()
                .stream()
                .map(ObjectError::getDefaultMessage)
                .reduce((m1, m2) -> m1 + ";" + m2)
                .orElse("参数输入有误!");
            throw new IllegalArgumentException(messages);
        }
    
        return "操作成功!";
    }
    
    1. 自行判断
    @PostMapping("/test3")
    public Object test3(@RequestBody User user) {
        // 参数校验
        validate(user);
    
        return "操作成功!";
    }
    
    private void validate(@Valid User user) {
        Set<ConstraintViolation<@Valid User>> validateSet = Validation.buildDefaultValidatorFactory()
                .getValidator()
                .validate(user, new Class[0]);
            if (!CollectionUtils.isEmpty(validateSet)) {
                String messages = validateSet.stream()
                    .map(ConstraintViolation::getMessage)
                    .reduce((m1, m2) -> m1 + ";" + m2)
                    .orElse("参数输入有误!");
                throw new IllegalArgumentException(messages);
    
            }
    }
    
    • 注意

      使用校验类注解时

      如果参数是基础类型,可以直接使用,

      如果参数是对象,需要添加 @Valid 注解,不然在参数对象里的校验不生效

    参考链接
    Spring Validation的3种执行校验方式

    相关文章

      网友评论

          本文标题:【20001】Java常用注解

          本文链接:https://www.haomeiwen.com/subject/viglvhtx.html