java方法参数注解_Java 注解方式校验请求参数

1. 参数校验常用注解

注解

验证的数据类型

备注

Null

任意类型

参数值必须是 Null

NotNull

任意类型

参数值必须不是 Null

NotBlank

只能作用于字符串

字符串不能为 null,而且字符串长度必须大于0,至少包含一个非空字符串

NotEmpty

CharSequence

Collection

Map

Array

字符串:字符串长度必须大于0,空字符串(“ ”)可以通过校验;

Collection:集合大小必须大于0;

Map:map的大小必须大于0;

Array:数组长度必须大于0;

Size

CharSequence

Collection

Map

Array

同 NotEmpty

Range

数字类型

字符串类型

数值或者字符串的值必须在 min 和 max 指定的范围内

Length

字符串类型

字符串的长度在min 和  max 之间

Pattern

字符串类型

验证字符串是否符合正则表达式

Min

整型类型

参数值必须大于等于 最小值

Max

整型类型

参数值必须小于等于 最大值

DecimalMin

整型类型

参数值必须大于等于 最小值

DecimalMax

整型类型

参数值必须小于等于 最大值

AssertTrue

布尔类型

参数值必须为 true

AssertFalse

布尔类型

参数值必须为 false

Past

时间类型

参数值必须小于 当前时间

Future

时间类型

参数值必须大于 当前时间

2.  @Validated 和 @Valid

2.1 相同点

在检验参数符合规范的功能上基本一致;

2.2 不同点

2.2.1 提供者

validated 是Spring Validation验证框架对参数的验证机制;

valid是 javax 提供的参数验证机制

2.2.2 作用域

validated :类,方法,参数

valid:方法, 字段, 构造方法, 参数, TYPE_USE;

TYPE_USE:

在 Java 8 之前的版本中,只能允许在声明式前使用Annotation。而在Java 8版本中,Annotation可以被用在任何使用Type的地方,例如:初始化对象时(new),对象类型转化时,使用implements表达式时,或者使用throws表达式时。

//初始化对象时

String myString = new@Valid String();//对象类型转化时

myString =(@Valid String) str;//使用 implements 表达式时

class MyList implements List{

...

}//使用 throws 表达式时

public void validateValues() throws@Valid ValidationFailedException{

...

}

3. 嵌套检验

在被检验的字段上添加 @Valid 注解就可以实现嵌套检验

当对象 Man 的字段 houses 包含 House 对象类型时,在检验 houses 字段时可以检验 House 对象的属性字段时,就称为嵌套检验。

示例如下:

在检验 Man 对象的 houses 字段时,在houses 字段上添加 @Valid 注解后,就可以检验 list 中的 House 的属性是否符合要求;

否则只会检验 houses 的集合大小是否大于1,不会校验集合中的 House 对象,比如 House 对象的 name 长度是否符合要求。

classMan{

@Valid

@Size(min= 1)private Listhouses;

}classHouse{

@Length(min= 1,max = 10)privateString name;

}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用自定义注解校验请求参数。下面是一个示例: 首先,创建一个自定义注解类,例如 `@RequestParamValid`: ```java import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface RequestParamValid { String value() default ""; } ``` 然后,在你的控制器方法中使用 `@RequestParamValid` 注解来标记需要校验参数: ```java @PostMapping("/example") public String exampleMethod(@RequestParam @RequestParamValid String parameter) { // ... } ``` 接下来,你可以创建一个切面来处理参数校验逻辑。切面可以使用 Spring 提供的 `HandlerMethodArgumentResolver` 接口来实现: ```java import org.springframework.core.MethodParameter; import org.springframework.stereotype.Component; import org.springframework.web.bind.support.WebDataBinderFactory; import org.springframework.web.context.request.NativeWebRequest; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.method.support.ModelAndViewContainer; @Component public class RequestParamValidResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { return parameter.hasParameterAnnotation(RequestParamValid.class); } @Override public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception { // 在这里进行参数校验逻辑,可以使用各种方式校验参数 // 例如,你可以使用 Hibernate Validator 进行校验 // 如果参数校验失败,可以抛出异常或返回错误信息 // 如果参数校验通过,可以返回参数的值 // 这里只是一个示例,假设参数不能为空 Object argumentValue = webRequest.getParameter(parameter.getParameterName()); if (argumentValue == null || argumentValue.toString().isEmpty()) { throw new IllegalArgumentException("参数校验失败"); } return argumentValue; } } ``` 最后,将切面注册到 Spring 容器中,以便生效。你可以在配置类中使用 `@EnableWebMvc` 注解来开启 Spring MVC 的相关功能: ```java import org.springframework.context.annotation.Configuration; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.List; @Configuration @EnableWebMvc public class WebConfig implements WebMvcConfigurer { private final RequestParamValidResolver requestParamValidResolver; public WebConfig(RequestParamValidResolver requestParamValidResolver) { this.requestParamValidResolver = requestParamValidResolver; } @Override public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) { resolvers.add(requestParamValidResolver); } } ``` 现在,当请求进入控制器方法时,会自动触发参数校验逻辑。如果参数校验失败,将会抛出异常或返回错误信息。如果校验通过,控制器方法将会正常执行。 这只是一个简单的示例,你可以根据实际需求进行更复杂的参数校验逻辑。希望对你有帮助!如有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值