SpringBoot注解校验参数及统一异常处理
<p>-分组注解</p>
<pre><code>package com.example.demo.anno;
/**
* 更新分组
*/
public @interface UpdateGroup {
}
</code></pre>
<ul>
<li>dto</li>
</ul>
<pre><code>package com.example.demo.entity;
import com.example.demo.anno.MyNotBlank;
import com.example.demo.anno.UpdateGroup;
import lombok.Data;
import org.hibernate.validator.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 入参
*
* @author jxd
* @version 1.0 *
* @date 2020/12/22 10:55
*/
@Data
public class One implements Serializable {
@NotNull(message = "id不能为空", groups = UpdateGroup.class)
private String id;
@NotBlank(message = "名称不能为空")
private String name;
@NotBlank(message = "手机不能为空")
private String mobile;
@MyNotBlank(message = "必须是2", vals = {"2"})
@NotBlank(message = "地址不能为空")
private String address;
}
</code></pre>
<ul>
<li>Controller</li>
</ul>
<pre><code>package com.example.demo.ctl;
import com.example.demo.entity.One;
import com.example.demo.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @author jxd
* @version 1.0 *
* @date 2020/12/22 10:54
*/
@RestController
public class ParamVaildateController {
@PostMapping("/one")
public Object one(@Validated @RequestBody One one) {
return one;
}
@Autowired
private TestService testService;
/**
* 测试分组 更新 校验Id不能为空
*/
@PostMapping("/two")
public Object two(@Validated({UpdateGroup.class}) @RequestBody One one) throws Exception {
//testService.canshu(one);
return one;
}
}
</code></pre>
<ul>
<li>统一异常处理</li>
</ul>
<pre><code>package com.example.demo.config;
import com.example.demo.common.HttpResponse;
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.ExceptionHandler;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import java.util.List;
/**
* 异常处理
*
* @author jxd
* @version 1.0 *
* @date 2020/12/22 11:25
*/
@RestControllerAdvice
public class ExceptionConfig {
/**
* 日志
*/
Logger logger = LoggerFactory.getLogger(this.getClass());
/**
* 抛出异常
*/
@ExceptionHandler(Exception.class)
public Object exception(Exception exception) {
logger.error("", exception);
return HttpResponse.error("系统异常");
}
/**
* JSON参数校验绑定异常处理
*
* @param ex
* @return
*/
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public Object methodArgumentNotValidException(MethodArgumentNotValidException ex) {
BindingResult bindingResult = ex.getBindingResult();
// 获取所有的错误信息
List<ObjectError> allErrors = bindingResult.getAllErrors();
String[] errorMsg = {"参数异常"};
allErrors.forEach(e -> {
errorMsg[0] = e.getDefaultMessage();
logger.error(errorMsg[0]);
});
//返回统一错误响应格式信息
return HttpResponse.error(errorMsg[0]);
}
}
</code></pre>