Spring Boot --- Spring MVC: Controller参数


参数装配

在一个Http请求中,请求数据存放于Request对象中.而Spring MVC将会把Request对象中的数据,赋值到Controller方法体参数中,而不需要开发者再从Request中读取.
这个行为称之为参数装配.

常用注解

使用Spring MVC提供的注解,可定义Controller方法体参数与Request对象中数据的映射关系。常用注解包括:

@PathVariable

装配地址中的数据

@RequestParam

装配Form方式提交的数据

@RequestBody

装配Payload方式提交的数据

@ModelAttribute

装配Form方式提交的数据,使其成为对象参数中的属性.

@RequestHeader

装配Header中的数据

其他参数

在Controller方法体中,如果是以下参数类型,可以不用添加注解,Spring MVC将默认注入该值。
- HttpServletRequestServletRequest
- HttpServletResponseServletResponse
- 在当前ControllerControllerAdvice作用域中的@ModelAttribute方法的返回值.
ModelAttribute的使用

自定义的参数解析器 – HandlerMethodArgumentResolver

自定义的参数解析器的使用

参数校验

Spring Boot中默认集成了Spring ValidatorHibernate Validator.

校验用注解

  • Spring Validator
注解 数据类型 说明
@Null 任意类型 必须为空
@NotNull 任意类型 必须不为空
@AssertFalse boolean,Boolean 注解布尔值为false
@AssertTrue 同@AssertFalse 注解布尔值为true
@Max(value=值) BigDecimal,BigInteger, byte,short, int, long,等任何Number 设置最大值
@Min(value=值) 同@Min 设置最小值
@DecimalMax(value=值) 同@Min 设置最大值
@DecimalMin(value=值) 同@Min 设置最大值
@Digits(integer=整数位数,fraction=小数位数) 同@Min 设置整数位和小数位
@Future java.util.Date,java.util.Calendar;Joda Time类库的日期类型 比当前时间晚
@Past 同@Future 比当前时间早
@Size(min=最小值,max=最大值) 字符串、Collection、Map、数组等 长度
@Pattern(regexp=正则表达式) String 匹配正则表达式

- Hibernate Validator注解

注解 数据类型 说明
@Range(min=最小值, max=最大值) 同@Min 验证注解的元素值在最小值和最大值之间
@URL String 校验URL格式
@Email String 校验Email格式
@NotBlank String 不为null,不为”“
@NotEmpty 任意类型 不为null,字符串长度不为0,集合大小不为0

使用方法

对简单数据类型的校验

  1. 在类上添加@Validated注解
  2. 在参数上添加Spring Validator注解
    @RestController
    @RequestMapping("/api")
    @Validated
    public class HelloContrller {
        @GetMapping("/say/{id}")
        public String sayHello(@Min(value=1,message="id不为负数") @PathVariable Long id){
            return id + " say : Hello World";
        }
    }

对实体类的校验

  1. 在实体类的属性或getter方法上添加Spring Validator注解
  2. 在方法参数上添加@Validated注解
  3. 实体类参数,无法校验对象属性内部的属性.
public class User {
    @Null(message="必须为空")
    private Long id;
    @NotNull(message="name不能为空")
    private String name;
    private Boolean sex;
    private String description;
    @NotNull(message = "不能为空")
    private Company company;
}

    @PostMapping("/b")
    public User add02(@RequestBody @Validated User user){
        System.out.println(user);
        return user;
    }

分组实体类参数的不同校验规则

  1. 在实体类的属性或getter方法上添加Spring Validator注解.并在注解上添加groups值
  2. 在方法参数上添加@Validated注解,并指定group值
  3. 当Spring Validator注解的groups包含@Validated注解的value,该Spring Validator注解才生效

    @Null(groups = ValidFor.Add.class,message="必须为空")

    @Validated(value = ValidFor.Add.class)

猜你喜欢

转载自blog.csdn.net/d292222100/article/details/81904209