- 引入验证包 Validate
springboot 使用 2.3.1.RELEASE 版本
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
- 定义参数实体验证类 IndexRequest.java
package cn.waimaolang.demo.request.home;
import lombok.Data;
import javax.validation.constraints.*;
@Data
public class IndexRequest {
// 定义分组验证1
public static interface Group1 {};
// 定义分组验证2
public static interface Group2 {};
@NotNull(message ="name 不能为空",groups = {Group1.class})
private String name;
@NotBlank(message ="password 不能为空")
private String password;
public String getName() {
return name;
}
public String getPassword() {
return password;
}
public String getEmail() {
return email;
}
@Email(message ="email 格式非法")
@NotNull(message ="email 不能为空")
private String email;
}
- 控制器调用
由于该方法仅使用分组1的验证,故仅会验证参数 name, 其他参数不会验证
@RestController
@RequestMapping(value = "home")
public class Index
{
@PostMapping("/addName")
public String validate1(
// 使用分组1 的验证。
@Validated(IndexRequest.Group1.class) @RequestBody IndexRequest indexRequest
){
String res = "用户名:"+indexRequest.getName()+
",密码:"+indexRequest.getPassword()+
",邮箱:"+indexRequest.getEmail();
return res;
}
}
4 . 定义全局异常处理类 GlobalWebException 接收异常处理
package cn.waimaolang.demo.exception;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.MethodArgumentNotValidException;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.context.request.WebRequest;
import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @title web框架全局异常处理类
*/
@RestControllerAdvice
public class GlobalWebException extends ResponseEntityExceptionHandler
{
// 当产生异常的时候,会触发。并返回到前端
@Override
protected ResponseEntity<Object> handleMethodArgumentNotValid(
MethodArgumentNotValidException ex,
HttpHeaders headers,
HttpStatus status,
WebRequest request
) {
// 获取全部错误
/*List<String> errors = new ArrayList<>();
List<ObjectError> allErrors = ex.getBindingResult().getAllErrors();
for(ObjectError error : allErrors){
errors.add(error.getDefaultMessage());
}*/
// 获取一个错误
Map<String,Object> map = new HashMap<String,Object>();
map.put("code",-1);
map.put("msg",ex.getBindingResult().getFieldError().getDefaultMessage());
return new ResponseEntity(map, status);
}
}
网友评论