SpringBoot项目 请求参数校验

1.先引入maven配置

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

2.定义一个统一的返回对象体

package com.fox.dto.base;

import java.io.Serializable;

/**
 * Created by zjh
 */
public class Response<T> implements Serializable {
    private Integer code;
    private String message;
    private boolean success;
    protected T data;

    public Integer getCode() {
        return code;
    }

    public void setCode(Integer code) {
        this.code = code;
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public boolean isSuccess() {
        if (this.getCode() == 0) {
            return true;
        }
        return success;
    }

    public T getData() {
        return data;
    }

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

    public Response(Integer code, String message, T data) {
        this.code = code;
        this.message = message;
        this.data = data;
    }

    public static <T>Response<T> buildSucessResponse(T data){
      return new Response(0,"操作成功",data);
    }
    public static <T>Response<T> buildResponse(Integer code,String message,T data){
        return new Response(code,message,data);
    }

}

3.定义参数校验的类

package com.fox.exception;

import com.fox.dto.base.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
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 javax.validation.ConstraintViolation;
import javax.validation.ConstraintViolationException;
import javax.validation.ValidationException;
import java.util.Set;

/**
 * Created by zjh
 */
@ControllerAdvice
public class ExceptionController {
    private static Logger logger = LoggerFactory.getLogger(ExceptionController.class);

    /**
     * 参数验证异常
     */
    @ExceptionHandler(ValidationException.class)
    @ResponseBody
    public Response<String> MethodArgumentNotValidException(ValidationException exception) {
        StringBuffer msg = new StringBuffer();
        if (exception instanceof ConstraintViolationException) {
            ConstraintViolationException exs = (ConstraintViolationException) exception;
            Set<ConstraintViolation<?>> violations = exs.getConstraintViolations();
            for (ConstraintViolation<?> item : violations) {
                msg.append(item.getMessage() + "!");
            }
        }
        logger.warn("ValidationException error:{}",msg);
        return Response.buildResponse(-1, msg.toString(), null);
    }


    /**
     * 参数验证异常
     */
    @ExceptionHandler(MethodArgumentNotValidException.class)
    @ResponseBody
    public Response<String> MethodArgumentNotValidException(MethodArgumentNotValidException exception) {
        StringBuffer msg = new StringBuffer();
        if (exception instanceof MethodArgumentNotValidException) {
            BindingResult br = exception.getBindingResult();
            for (ObjectError err : br.getAllErrors()) {
                msg.append(err.getDefaultMessage() + "!");
            }
        }
        logger.warn("MethodArgumentNotValidException warn:{}",exception.getBindingResult());
        return Response.buildResponse(-1, msg.toString(), null);
    }
}

4.请求对象加验证配置

package com.fox.dto.req;

import javax.validation.constraints.NotEmpty;

/**
 * Created by zjh
 */
public class LoginUser {

    private String userName;

    @NotEmpty(message = "密码不能为空")
    private String passWord;

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassWord() {
        return passWord;
    }

    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }
}

5.用一个登录接口测试下

package com.fox.controller;

import com.fox.dto.base.Response;
import com.fox.dto.req.LoginUser;
import com.fox.dto.resp.LoginUserRespDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.validation.Valid;

/**
 * Created by zjh
 */
@Controller
@RequestMapping(value = "/app")
@Api(value = "User", tags = {"User"}, description = "用户相关")
@ResponseBody
public class AppController {
    private static Logger logger = LoggerFactory.getLogger(AppController.class);

    @ApiOperation("用户登录接口")
    @PostMapping(value = "/login")
    public Response<LoginUserRespDto> login(@Valid @RequestBody LoginUser loginUser){
        logger.info("loginUser:{}",loginUser.getPassWord());
        return Response.buildSucessResponse(null);
    }
    
}

6.看下测试效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值