spring-web加javax.validation实现统一验证处理_v1.0.3

文件名称版本号作者qq版本
spring-web加javax.validation实现统一验证处理v1.0.3学生宫布8416837SpringBoot 2.2.6

!直接看代码比较易懂

这是一个web接口,注意注解的写法
	@GetMapping("/listByIds")
    @Validated // import org.springframework.validation.annotation.Validated;
    private ServiceR listByIds(@RequestParam @NotEmpty Long[] ids) { // import javax.validation.constraints.NotNull;
    ... ...
    }

当参数ids为null或无元素时,将被拒绝服务。

写一个类拦截异常
@RestControllerAdvice
public class BaseController {
	@ExceptionHandler({Exception.class})
    public Response handleException(Exception e) {
        return Response.error(e.getMessage());
    }
}

当访问异常时,将统一由此返回信息给调用方。Rest json化。如不传参调用接口时↓
在这里插入图片描述
↑因为ids不存在

或者抛出RuntimeException时,会被RestControllerAdvice拦截到,从而进行一些处理。

	if(参数不合法) throw new RuntimeException("参数长度不能为0!"); // 会进入RestControllerAdvice

总而言之,简化代码,使代码优雅。

处理@RequestBody Json参数

代码

Model:
【注意】类上面不要加@Validated

@NotBlank(message = "服务名称不能为空")
private String routeName;

Controller:

private R save(@RequestBody @Validated GwRouteDO entity) {
测试
  • 不传或传空值(加了非空注解的参数),试试
    抛出异常:
org.springframework.web.bind.MethodArgumentNotValidException: Validation failed for argument [0] in private com.abc.common.utils.R com.abc.gateway.admin.provider.RouteProvider.save(com.abc.gateway.admin.entity.GwRouteDO): [Field error in object 'gwRouteDO' on field 'routeName': rejected value []; codes [NotBlank.gwRouteDO.routeName,NotBlank.routeName,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [gwRouteDO.routeName,routeName]; arguments []; default message [routeName]]; default message [服务名称不能为空]]

↑告知routeName不能为空

统一处理这种参数异常

但是上文那种提示太不友好了,因此我们需要规范化:

  • 代码 节选
// 加上注解拦截异常,对应异常会进入对应代码
@RestControllerAdvice
public class BaseController {
		@ExceptionHandler(MethodArgumentNotValidException.class)
	    public R bindException(MethodArgumentNotValidException e) {
	        BindingResult bindingResult = e.getBindingResult();
	        StringBuilder sb = new StringBuilder();
	        sb.append("参数校验不通过:");
	        for (FieldError fieldError : bindingResult.getFieldErrors()) {
	            sb.append("\n");
	            sb.append(fieldError.getDefaultMessage());
	        }
	        return R.error(sb.toString());
	    }
    }
  • 效果:
    在这里插入图片描述

统一正则验证

// 在字段加正则注解,↓只对字符串相以及关类型有效
@Pattern(
            regexp = "^[a-zA-Z][a-zA-Z0-9_]*$",
            message = "名称不合法"
    )
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值