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.看下测试效果