package com.kidgrow.common.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.kidgrow.common.exception.BeanValidateException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.modelmapper.ModelMapper;
import org.springframework.beans.factory.annotation.Autowired;
import javax.validation.ConstraintViolation;
import javax.validation.Validator;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
/**
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020
*
* @Description: 基类
* @Project:
* @CreateDate: Created in 2020/2/3 17:08
* @Author: liuke
*/
@Slf4j
public class BaseController {
@Autowired(required=false)
private ModelMapper modelMapper;
@Autowired
private ObjectMapper objectMapper;
@Autowired(required = false)
private Validator validator;
protected T parseAndValidParams(String str, Class clazz) {
T dto = null;
try {
str = StringUtils.isBlank(str) ? "{}" : str;
dto = objectMapper.readValue(str, clazz);
} catch (IOException e) {
throw new BeanValidateException("解析数据时发生错误");
}
if (validator != null) {
Set> errors = null;
try {
errors = validator.validate(dto);
} catch (Exception e) {
log.error("参数校验异常", e);
throw new BeanValidateException("解析数据时发生错误");
}
if (CollectionUtils.isNotEmpty(errors)) {
Set> errorSet = new HashSet<>(errors);
throw new BeanValidateException("参数不符合要求", errorSet);
}
}
return dto;
}
protected T parseParams(String str, Class clazz) {
T dto = null;
try {
str = StringUtils.isBlank(str) ? "{}" : str;
dto = objectMapper.readValue(str, clazz);
} catch (IOException e) {
throw new BeanValidateException("解析数据时发生错误");
}
return dto;
}
protected T map(Object data, Class clazz) {
return modelMapper.map(data, clazz);
}
protected List mapList(List> data, Class clazz) {
if (data == null) {
return null;
}
List result = new ArrayList<>(data.size());
for (Object item : data) {
result.add(modelMapper.map(item, clazz));
}
return result;
}
}