【20001】Java常用注解

@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> 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常用注解)