Validator 参数校验及异常处理返回前端
代码地址:https://gitee.com/lemon_tea_is_a_little_sour/demo-validator.git呈现的效果导入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation&l
·
代码地址:https://gitee.com/lemon_tea_is_a_little_sour/demo-validator.git
呈现的效果
导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
实体类
package com.example.demovalidator.entity;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Null;
import javax.validation.constraints.PastOrPresent;
import java.time.LocalDateTime;
/**
* @author lxw
* @date 2021/8/9
* @apiNote
*/
@Data
public class Student {
/**
* id
*/
@Null(message = "主键不可有值")
private Integer id;
/**
* 姓名
*/
@NotBlank(message = "姓名不能为空")
private String name;
/**
* 性别
*/
@NotBlank(message = "性别不能为空")
private String sex;
/**
* 创建时间
*/
@NotNull(message = "时间不能为空")
@PastOrPresent(message = "时间格式不对")
private LocalDateTime createTime;
}
返回类型的枚举类
package com.example.demovalidator.enums;
/**
* @author lxw
* @date 2021/8/9
* @apiNote
*/
public enum ErrorCode {
PARAM_ERROR("100","参数不正确");
private String code;
private String msg;
ErrorCode(String code,String msg){
this.code = code;
this.msg = msg;
}
public String getCode() {
return code;
}
public String getMsg() {
return msg;
}
public void setCode(String code) {
this.code = code;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
封装的返回
package com.example.demovalidator.Vo;
import com.example.demovalidator.enums.ErrorCode;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.Data;
/**
* @author lxw
* @date 2021/8/9
* @apiNote
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ResultVo {
/**
* 后端是否处理成功
*/
private boolean success;
/**
* 错误码
*/
private String code;
/**
* 错误消息
*/
private String msg;
/**
* 给前端返回的值
*/
private Object data;
public static ResultVo success(){
ResultVo resultVo = new ResultVo();
resultVo.setSuccess(true);
return resultVo;
}
public static ResultVo success(Object data){
ResultVo resultVo = new ResultVo();
resultVo.setSuccess(true);
resultVo.setData(data);
return resultVo;
}
public static ResultVo fail(ErrorCode errorCode,Object data){
ResultVo resultVo = new ResultVo();
resultVo.setSuccess(false);
resultVo.setCode(errorCode.getCode());
resultVo.setMsg(errorCode.getMsg());
resultVo.setData(data);
return resultVo;
}
public static ResultVo fail(ErrorCode errorCode){
ResultVo resultVo = new ResultVo();
resultVo.setSuccess(false);
resultVo.setCode(errorCode.getCode());
resultVo.setMsg(errorCode.getMsg());
return resultVo;
}
}
全局的异常处理
package com.example.demovalidator.web;
import com.example.demovalidator.Vo.ResultVo;
import com.example.demovalidator.enums.ErrorCode;
import org.springframework.validation.FieldError;
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;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author lxw
* @date 2021/8/9
* @apiNote
*/
@ControllerAdvice
@ResponseBody
public class CtrIAdvice {
@ExceptionHandler
public ResultVo exceptionHandler(MethodArgumentNotValidException e){
Map<String, String> collect = e.getBindingResult().getFieldErrors().stream()
.collect(Collectors.toMap(FieldError::getField, FieldError::getDefaultMessage));
return ResultVo.fail(ErrorCode.PARAM_ERROR,collect);
}
}
controller类
package com.example.demovalidator.api;
import com.example.demovalidator.Vo.ResultVo;
import com.example.demovalidator.entity.Student;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
/**
* @author lxw
* @date 2021/8/9
* @apiNote
*/
@RestController
@RequestMapping("/demo")
@Validated //对本类中的方法进行校验
public class StudentController {
@PostMapping
public ResultVo add(@RequestBody @Valid/*校验后面的参数*/ Student student){
return ResultVo.success();
}
}
更多推荐
已为社区贡献1条内容
所有评论(0)