注解接收前端信息或对象,返回自定义异常
1.注解方式
自定义拦截器
用拦截抛出的自定义异常异常,代码如下
import com.es.Result;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.ConstraintViolationException;
@ControllerAdvice
public class VaildExceptionConfig {
private static final Logger logger = LoggerFactory.getLogger(VaildExceptionConfig.class);
@ResponseBody
@ExceptionHandler(MethodArgumentNotValidException.class)
public Result throwCustomException(MethodArgumentNotValidException methodArgumentNotValidException){
logger.error("[ @Vaild异常捕获 ] " + methodArgumentNotValidException.getMessage());
return Result.error(methodArgumentNotValidException.getBindingResult().getFieldError().getDefaultMessage());
}
@ResponseBody
@ExceptionHandler(ConstraintViolationException.class)
public Result throwCustomException(ConstraintViolationException constraintViolationException){
logger.error("[ @Vaild异常捕获 ] " + constraintViolationException.getMessage());
return Result.error(constraintViolationException.getMessage());
}
}
实体类加入注解@NotEmpty @NotNull @NotBlank
部分代码如下
@NotEmpty(message = "请输入区域id")
@ApiModelProperty(value = "区域id")
private String areaId;
@NotEmpty(message = "请输入开始时间")
@ApiModelProperty(value = "开始时间")
// @JsonFormat(pattern="yyyy-MM-dd HH:mm",timezone="GMT+8")
private String startDate;
@NotEmpty(message = "请输入结束事件")
@ApiModelProperty(value = "结束事件")
// @JsonFormat(pattern="yyyy-MM-dd HH:mm",timezone="GMT+8")
控制层 Controller 类上加入注解 @Validated 不然会失效
控制层 Controller 类上加入注解 @Validated 不然会失效
控制层 Controller 类上加入注解 @Validated 不然会失效
部分代码如下
@Validated
@RequestMapping("/xxx")
public class XXXController {}
接口方法上加入注解 @Valid 或 传入参数加注解@Valid
部分代码如下
@PostMapping("query_event")
public Result queryEvent(@RequestBody @Valid XXXModel e){
...
}
2.自定义方法
import java.lang.reflect.Field;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class ObjectFildValidate {
public static final Logger logger = LoggerFactory.getLogger(ObjectFildValidate.class);
/**
*
* @Title: validateFild
* @Description: 检查指定对象的属性值是否为空
* @param: @param object
* @param: @param exclFild
* @param: @return
* @return: boolean
* @throws
*/
public static boolean validateFild(Object object){
boolean target = true;
for (Field f : object.getClass().getDeclaredFields()) {
f.setAccessible(true);
try {
String name = f.getName();
//判断字段是否为空,并且对象属性中的基本都会转为对象类型来判断
if (f.get(object) == null || f.get(object).equals("")) {
target = false;
return target;
}
//判断为集合,集合为空返回false
if(f.get(object) instanceof List and ((List)f.get(object)).size()< 1){
target = false;
return target;
}
} catch (IllegalArgumentException e) {
target = false;
logger.error("对象属性解析异常" + e.getMessage());
return target;
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
target = false;
logger.error("对象属性解析异常" + e.getMessage());
return target;
}
}
return target;
}
/**
*
* @Title: validateFild
* @Description: 检查指定对象的属性值是否为空,排除指定的属性值
* @param: @param object
* @param: @param exclFild
* @param: @return
* @return: boolean
* @throws
*/
public static boolean validateFild(Object object, List exclFild){
boolean target = false;
for (Field f : object.getClass().getDeclaredFields()) {
f.setAccessible(true);
try {
String name = f.getName();
// 判断属性名称是否在排除属性值中
if(!exclFild.contains(name)){
if (f.get(object) != null) { //判断字段是否为空,并且对象属性中的基本都会转为对象类型来判断
target = true;
break;
}
}
} catch (IllegalArgumentException e) {
target = false;
logger.error("对象属性解析异常" + e.getMessage());
return target;
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
target = false;
logger.error("对象属性解析异常" + e.getMessage());
return target;
}
}
return target;
}
}