一、序列化问题
没有过多的性能需求,建议使用spring内置的jackjson,安全上更有保障
(1)返回数据
- 返回空字段
/*** 处理空字段* @param builder* @return*/@Beanpublic ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {// 实例化objectMapperObjectMapper objectMapper = builder.createXmlMapper(false).build();objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS);return objectMapper;}
- 处理js序列化数字串精度丢失问题
@Bean("jackson2ObjectMapperBuilderCustomizer")public Jackson2ObjectMapperBuilderCustomizer jackson2ObjectMapperBuilderCustomizer() {Jackson2ObjectMapperBuilderCustomizer customizer = jacksonObjectMapperBuilder -> jacksonObjectMapperBuilder.serializerByType(Long.class, ToStringSerializer.instance).serializerByType(Long.TYPE, ToStringSerializer.instance);return customizer;}
二、javax.validation.Valid 无法校验对象集合
- 编写增强工具类
import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import java.util.List;
import java.util.Set;/*** @author yilv* @version 1.0* @description: 实体校验增强* @date 2022/11/16 15:21*/
public class ValidateUtil {private static final Validator validator;static {ValidatorFactory vf = Validation.buildDefaultValidatorFactory();validator = vf.getValidator();}/*** 反射校验内层元素** @param list*/public static <T> void innerValidate(List<T> list) {list.forEach(M -> {Set<ConstraintViolation<T>> validate = validator.validate(M);if (validate.size() > 0) {throw new RuntimeException(validate.iterator().next().getMessage());}});}/*** 反射校验内层元素** @param object*/public static <T> void innerValidate(T object) {Set<ConstraintViolation<T>> validate = validator.validate(object);if (validate.size() > 0) {throw new RuntimeException(validate.iterator().next().getMessage());}}
}
三、com.baomidou.mybatisplus.extension.service.IService#updateById 设置字段为null,失效
- mp的updateById 操作默认会过滤null值,你可以设置忽略该更新策略
@TableField(value = "xxx",updateStrategy = FieldStrategy.IGNORED)