众所周知,使用@RequestParam(required = false)
封装请求参数的时候,如果客户端不提交参数,或者是只声明参数,并不赋值。那么方法的形参值,默认为null(基本数据类型除外)。
一个Controller方法,有2个参数
@GetMapping
public Object update(@RequestParam(value = "number", required = false) Integer number,
@RequestParam(value = "phone", required = false) String phone) {
LOGGER.info("number={}, phone={}", number, phone);
return Message.success(phone);
}
很简单的一个Controller方法。有两个参数,都不是必须的。只是这俩参数的数据类型不同。
// 都不声明参数
http://localhost:8080/test
日志输出:number=null, phone=null
// 都只声明参数,但是不赋值
http://localhost:8080/test?number=&phone=
日志输出出:number=null, phone=
这里可以看出,String
类型的参数。在声明,不赋值的情况下。默认值为空字符串。
使用spring-validation遇到@RequestParam(required = false)
字符串参数的问题
一个验证手机号码的注解
极其简单,通过正则验证字符串是否是手机号码
import static java.lang.annotation.RetentionPolicy.RUNTIME;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import javax.validation.Constraint;
import javax.validation.Payload;
import javax.validation.ReportAsSingleViolation;
import javax.validation.cons