springboot通過註解的方式實現對參數的驗證並用攔截器攔截拋出自定義json

話不多說上代碼

UserController類

@RestController
@RequestMapping("/user")
public class UserController {

    @PostMapping("/add")
    public User add(@Validated(value = User.Add.class) @RequestBody User user) {
        return user;
    }

    @PostMapping("/update")
    public User update(@Validated(value = User.Update.class) @RequestBody User user) {
        return user;
    }

}

MethodsExceptionHandler攔截器類

@RestControllerAdvice
public class MethodsExceptionHandler {

    @ExceptionHandler(MethodArgumentNotValidException.class)
    public JSONResult ex(MethodArgumentNotValidException ex) {
        List<ObjectError> allErrors = ex.getBindingResult().getAllErrors();
        return JSONResult.errorException(getErrorMessage(allErrors));
    }

    private String getErrorMessage(List<ObjectError> allErrors) {
        String errorMessage = "";
        for (int i = allErrors.size() - 1; i >= 0; i--) {
            errorMessage += allErrors.get(i).getDefaultMessage() + ",";
        }
        return errorMessage.substring(0, errorMessage.length() - 1);
    }
}

User類

@Data
public class User {

    public interface Add {
    }

    public interface Update {
    }

    @NotNull(message = "id不能爲空", groups = Update.class)
    @Null(message = "id必須爲空", groups = Add.class)
    private Integer id;

    @NotEmpty(message = "名字不能爲空", groups = {Update.class, Add.class})
    private String name;

    @Pattern(message = "電話號碼格式不正確", regexp = "^[1](([3|5|8][\\d])|([4][5,6,7,8,9])|([6][5,6])|([7][3,4,5,6,7,8])|([9][8,9]))[\\d]{8}$")
    private String phon5e;

    @Email
    private String email;

    @Max(message = "年齡最大不能超過150", value = 150, groups = {Update.class, Add.class})
    @Min(message = "年齡最小不能低於0", value = 0, groups = {Update.class, Add.class})
    private String age;
}

分組驗證以及各種校驗的註解可以自行百度,資料有很多

JSONResult類 這是一個封裝好的用於json返回的工具類 使用起來比較方便!特別好!!!摘自imooc

public class JSONResult {

    // 定義jackson對象
    private static final ObjectMapper MAPPER = new ObjectMapper();

    // 響應業務狀態
    private Integer status;

    // 響應消息
    private String msg;

    // 響應中的數據
    private Object data;

    @JsonIgnore
    private String ok;    // 不使用

    public static JSONResult build(Integer status, String msg, Object data) {
        return new JSONResult(status, msg, data);
    }

    public static JSONResult build(Integer status, String msg, Object data, String ok) {
        return new JSONResult(status, msg, data, ok);
    }

    public static JSONResult ok(Object data) {
        return new JSONResult(data);
    }

    public static JSONResult ok() {
        return new JSONResult(null);
    }

    public static JSONResult errorMsg(String msg) {
        return new JSONResult(500, msg, null);
    }

    public static JSONResult errorMap(Object data) {
        return new JSONResult(501, "error", data);
    }

    public static JSONResult errorTokenMsg(String msg) {
        return new JSONResult(502, msg, null);
    }

    public static JSONResult errorException(String msg) {
        return new JSONResult(555, msg, null);
    }

    public static JSONResult errorUserQQ(String msg) {
        return new JSONResult(556, msg, null);
    }

    public static JSONResult errorUserTicket(String msg) {
        return new JSONResult(557, msg, null);
    }

    public JSONResult() {

    }

    public JSONResult(Integer status, String msg, Object data) {
        this.status = status;
        this.msg = msg;
        this.data = data;
    }

    public JSONResult(Integer status, String msg, Object data, String ok) {
        this.status = status;
        this.msg = msg;
        this.data = data;
        this.ok = ok;
    }

    public JSONResult(Object data) {
        this.status = 200;
        this.msg = "OK";
        this.data = data;
    }

    public Boolean isOK() {
        return this.status == 200;
    }

    public Integer getStatus() {
        return status;
    }

    public void setStatus(Integer status) {
        this.status = status;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public Object getData() {
        return data;
    }

    public void setData(Object data) {
        this.data = data;
    }

    public String getOk() {
        return ok;
    }

    public void setOk(String ok) {
        this.ok = ok;
    }

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章