首页 > 其他 > 详细

功能:@Vaild注解使用及扩展

时间:2020-12-17 17:22:27      阅读:28      评论:0      收藏:0      [点我收藏+]

@Vaild注解使用及扩展

一、@Vaild注解介绍

使用@Vaild注解可以简化入参的校验,配合统一异常实现简单快捷的入参校验,具体使用参照以下

二、@Vaild具体使用

1、引入jar包

如果你是springboot项目,此依赖内已经引入,无需再次引入

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <version>2.0.5.RELEASE</version>
</dependency>

如果没有,将依赖jar包引入到自己的项目中,maven依赖如下

<dependency>
    <groupId>javax.validation</groupId>
    <artifactId>validation-api</artifactId>
    <version>1.1.0.Final</version>
</dependency>
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-validator</artifactId>
    <version>5.3.5.Final</version>
</dependency>

2、在入参请求类中添加限制注解

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
import org.hibernate.validator.constraints.Range;

import javax.validation.constraints.NotNull;
import java.io.Serializable;

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserReq implements Serializable {
	
	private Integer id;
	
	@NotBlank(message = "用户名不能为空")
	@Length(message = "用户名最大为{max}个字符", max = 20)
	private String username;
	
	@NotBlank(message = "密码不能为空")
	@Length(message = "密码长度限制为{min}-{max}", min = 8, max = 16)
	private String password;
	
	@NotNull(message = "性别不能为空")
	private Byte sex;
	
	@Range(message = "年龄范围为{min}-{max}", min = 0, max = 120)
	private Integer age;

}

3、控制器中使用@Vaild

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@Slf4j
@RestController
@RequestMapping("/user/post")
public class PostController {

	@PostMapping("/create")
	public String createUser(@Valid @RequestBody UserReq req){
		log.info(JSON.toJSONString(req));
		return "成功";
	}

}

4、请求进行测试

技术分享图片

技术分享图片

虽然拦截成功,但错误出参不知道所以然,一头雾水,需进行优化

三、优化出参

1、修改控制器

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@Slf4j
@RestController
@RequestMapping("/user/post")
public class PostController {

	@PostMapping("/create")
	public String createUser(@Valid @RequestBody UserReq req, BindingResult result){
		// 如果发生错误,则返回第一个错误信息,这里也可以自定义返回信息
		if(result.hasErrors()){
			String message = result.getAllErrors().get(0).getDefaultMessage();
			log.error(message);
			return message;
		}
		log.info(JSON.toJSONString(req));
		return "成功";
	}

}

2、请求进行测试

技术分享图片

四、使用统一异常

1、创建统一异常捕获类

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@Slf4j
@ControllerAdvice
public class MyExceptionHandler {
	
	@ResponseBody
	@ExceptionHandler(Exception.class)
	public ResultData exceptionHandler(Exception exception){
		log.error("统一异常", exception);
        // 捕获对应异常进行处理,默认返回第一个错误信息,这里也可以自定义返回信息
		if(exception instanceof MethodArgumentNotValidException){
			MethodArgumentNotValidException ex = (MethodArgumentNotValidException) exception;
			String message = ex.getBindingResult().getAllErrors().get(0).getDefaultMessage();
			return ResultData.getFailResult(message);
		}
		return ResultData.getFailResult("服务器繁忙,请稍后再试!");
	}
	
}

2、此时控制器不需要做额外处理

import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;

import javax.validation.Valid;

@Slf4j
@RestController
@RequestMapping("/user/post")
public class PostController {

	@PostMapping("/create")
	public String createUser(@Valid @RequestBody UserReq req){
		log.info(JSON.toJSONString(req));
		return "成功";
	}

}

3、请求进行测试

技术分享图片

技术分享图片

五、自定义验证信息注解

功能:@Vaild注解使用及扩展

原文:https://www.cnblogs.com/banmoon/p/14150452.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!