需求:
自定义拦截器过滤Stirng类型字段值首尾空格
根据下列代码遇到的问题:
- 如果是实体不知道是否有下列代码更好的处理办法
- 如果是LambdaUpdateWrapper或UpdateWrapper,该如果获取每个字段过滤掉首位空格
以下是实现Mybatis plus的InnerInterceptor接口
public class StringSpacesInterceptor implements InnerInterceptor {
private final boolean wrapperMode;
public StringSpacesInterceptor() {
this(false);
}
public StringSpacesInterceptor(boolean wrapperMode) {
this.wrapperMode = wrapperMode;
}
@Override
public void beforeUpdate(Executor executor, MappedStatement mappedStatement, Object parameter) throws SQLException {
if (SqlCommandType.UPDATE != mappedStatement.getSqlCommandType() &&
SqlCommandType.INSERT != mappedStatement.getSqlCommandType()) {
return;
}
if (parameter instanceof Map) {
Map<String, Object> map = (Map<String, Object>) parameter;
spacesHandle(map, mappedStatement.getId());
}
}
@SneakyThrows
protected void spacesHandle(Map<String, Object> map, String msId) {
Object et = map.getOrDefault(Constants.ENTITY, null);
if (null != et) {
TableInfo tableInfo = TableInfoHelper.getTableInfo(et.getClass());
if (null != tableInfo) {
List<TableFieldInfo> fieldList = tableInfo.getFieldList();
if (null != fieldList && !fieldList.isEmpty()) {
for (TableFieldInfo tableFieldInfo : fieldList) {
if (!String.class.equals(tableFieldInfo.getPropertyType())) {
continue;
}
Field fieldInfo = tableFieldInfo.getField();
fieldInfo.setAccessible(true);
Object value = fieldInfo.get(et);
fieldInfo.set(et, ((String) value).trim());
}
}
}
}
// update(LambdaUpdateWrapper) or update(UpdateWrapper)
else if (wrapperMode && map.entrySet().stream().anyMatch(t -> Objects.equals(t.getKey(), Constants.WRAPPER))) {
// TODO 这里不知道怎么处理了......
}
}
}
搜索相关资料没有通过拦截器全局处理Mybatis plus字段前后空格问题的。难受。
希望大佬补充代码学习下....
之前也有这样的需求,然后通过注解配合拦截器实现,如果需要改造成全局,稍加修改也行。
我直接贴代码了。