spring注释判断入参JAVA_Spring 进入Controller前参数校验

在进入Controller前完成参数的校验,针对对象参数

分为两个验证方式

(1)直接使用已定义的校验方式

1、在需要进行校验的属性上增加校验类型注解

importjava.util.Date;importjavax.validation.constraints.Past;importorg.hibernate.validator.constraints.NotBlank;public classUser {privateString id;privateString username;

@NotBlank(message= "密码不能为空")privateString password;

@Past(message= "生日必须是过去的日期")privateDate birthday;

@JsonView(UserSimpleView.class)publicString getUsername() {returnusername;

}public voidsetUsername(String username) {this.username =username;

}publicString getPassword() {returnpassword;

}public voidsetPassword(String password) {this.password =password;

}publicString getId() {returnid;

}public voidsetId(String id) {this.id =id;

}publicDate getBirthday() {returnbirthday;

}public voidsetBirthday(Date birthday) {this.birthday =birthday;

}

}

2、在controller中增加注解

3、增加 BindingResult 获取错误信息

importjava.util.ArrayList;importjava.util.List;importjavax.validation.Valid;importorg.apache.commons.lang.builder.ReflectionToStringBuilder;importorg.apache.commons.lang.builder.ToStringStyle;importorg.springframework.data.domain.Pageable;importorg.springframework.validation.BindingResult;importorg.springframework.validation.FieldError;importorg.springframework.web.bind.annotation.DeleteMapping;importorg.springframework.web.bind.annotation.GetMapping;importorg.springframework.web.bind.annotation.PathVariable;importorg.springframework.web.bind.annotation.PostMapping;importorg.springframework.web.bind.annotation.PutMapping;importorg.springframework.web.bind.annotation.RequestBody;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.RestController;importcom.fasterxml.jackson.annotation.JsonView;importcom.maple.dto.User;importcom.maple.dto.UserQueryCondition;importcom.maple.dto.User.UserDetailView;importcom.maple.dto.User.UserSimpleView;importcom.maple.exception.UserNotExitException;/***

*@authorhzc

**/@RestController

@RequestMapping("/user")public classUserController {

@PostMappingpublicUser createUser(@Valid @RequestBody User user, BindingResult errors) {if (errors.hasErrors()) { //判断是否有错误值

errors.getAllErrors().stream().forEach(error ->System.out.println(error.getDefaultMessage()));

}

System.out.println(user.getId());

System.out.println(user.getPassword());

System.out.println(user.getUsername());

System.out.println(user.getBirthday());

user.setId("1");returnuser;

}

}

API中已有的校验方法

30ca7b98ae973b29dbb19dc25f5a3879.png

8de647bfcb9d607868fe574c1d5b851e.png

(2)自定义校验方法

1、建立自定义注解类,@Target  : 注解的范围,如方法,属性,类等 ;   @Retention  : 注解的生命周期,值为 RetentionnPolicy枚举类

packagecom.maple.validator;importjava.lang.annotation.ElementType;importjava.lang.annotation.Retention;importjava.lang.annotation.RetentionPolicy;importjava.lang.annotation.Target;importjavax.validation.Constraint;importjavax.validation.Payload;

@Target({ ElementType.METHOD, ElementType.FIELD })

@Retention(RetentionPolicy.RUNTIME)

@Constraint(validatedBy= MyConstraintValidator.class) //绑定下面自定义的校验方法

public @interfaceMyConstraint {//需要定义以下三个属性String message();

Class>[] groups() default{ };

Class extends Payload>[] payload() default{ };

}

2、定义校验方法,可在方法中使用 @Autowired 实现类的注入,在isValid中实现参数的验证。

packagecom.maple.validator;importjavax.validation.ConstraintValidator;importjavax.validation.ConstraintValidatorContext;importorg.springframework.beans.factory.annotation.Autowired;public class MyConstraintValidator implements ConstraintValidator{

@Overridepublic voidinitialize(MyConstraint constraintAnnotation) {

System.out.println("my validator init");

}

@Overridepublic booleanisValid(Object value, ConstraintValidatorContext context) {

helloService.greeting("Tom");

System.out.println(value);return false;

}

}

3、调用自定义的校验,在属性上增加自定义的注解 @MyConstraint

@MyConstraint(message = "这是一个测试")private String username;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值