easy-es Map类型字段序列化问题:Unexpected character (‘n‘ (code 110)):

@Data
@IndexName("demo")
public class EasyEsDemo {

    @IndexId
    private String id;

    private String name;
    private int age;

    // 这个Map字段因为NameFilter过滤器,导致fastjson序列化后为{null:"value"}这种形式,insert报错
    private Map<String, Object> data;
}

上面Map类型字段保存报错如下:

Caused by: ElasticsearchException[Elasticsearch exception [type=json_parse_exception, reason=Unexpected character ('n' (code 110)): was expecting double-quote to start field name
.....

此错误主要原因是:EntityInfoHelper中创建的NameFilter是一个匿名类,看上去主要功能就是过滤排除字段,但是针对Map类型字段就出现了问题,导致序列化时候Map的key字段变成了个null. 导致fastjson序列化后为{null:"value"}这种形式,insert报错。

EntityInfoHelper中NameFilter过滤器代码如下:这个过滤器导致序列化Map类型字段时,获取的key当成类的字段属性处理,而类中没有名字为key的字段,所以过滤器过滤完后key变成了null

    /**
     * 添加fastjson字段过滤器
     *
     * @param entityInfo 实体信息
     */
    private static void addNameFilter(EntityInfo entity
### 解决 ESLint `no-mixed-spaces-and-tabs` 和 `no-tabs` 错误的方法 ESLint 的规则 `no-mixed-spaces-and-tabs` 主要用于防止在同一文件或同一行中混合使用空格和制表符作为缩进字符[^1]。而规则 `no-tabs` 则进一步限制了不允许在代码中使用任何制表符(Tab)。这两种规则的目标都是为了保持代码的一致性和可读性。 #### 方法一:禁用制表符 如果决定在整个项目中完全移除制表符,可以在 `.eslintrc.js` 文件中启用 `no-tabs` 规则: ```javascript module.exports = { rules: { 'no-tabs': 'error', 'indent': ['error', 2], // 使用两个空格作为缩进 'no-mixed-spaces-and-tabs': 'error' // 禁止混合使用空格和制表符 } }; ``` 此配置不仅禁止了制表符的使用,还设置了统一的缩进风格为两个空格[^1]。 #### 方法二:全局替换现有的制表符 对于已经存在的代码库,可以先批量将所有制表符转换为空格。大多数现代编辑器都支持这一功能。例如,在 VS Code 中可以通过以下步骤完成: - 打开设置 (`Ctrl+,`) 并搜索 "Editor: Tab Size" 或者直接修改工作区设置为 `"editor.tabSize": 2`。 - 启用 "Convert Indentation to Spaces" 功能 (快捷键 `Shift+Alt+F` 可能有助于格式化文档)[^1]。 #### 方法三:允许特定场景下的制表符 如果你认为某些情况下保留制表符是有必要的,可以选择放宽规则限制。例如只针对部分文件忽略 `no-tabs` 检查: ```javascript /* eslint-disable no-tabs */ // 特定代码块内允许使用制表符 const example = '\tallowed'; /* eslint-enable no-tabs */ ``` 然而需要注意的是,这种方法可能会降低整体代码质量控制水平,因此应谨慎使用。 #### 方法四:自动化修复工具的应用 除了手动调整外,还可以依赖于 ESLint 自带的功能来进行自动化的错误修正。执行下面这条命令可以让 ESLint 对那些能够被自动处理的问题进行即时修复: ```bash eslint . --fix ``` 它会遍历当前目录及其子目录中的所有 JavaScript 文件,并依据已设定好的规则尝试解决问题,包括但不限于 `no-mixed-spaces-and-tabs` 类型的警告信息[^1]。 --- ### 注意事项 无论采取哪种策略,都应该考虑团队内部达成共识的重要性。制定清晰明确的编码规范并将之纳入持续集成流程之中是非常重要的一步。这样不仅可以保证每位贡献者的提交符合预期标准,还能减少后期维护成本。 另外值得注意的是,虽然这里讨论的重点是如何解决由这两个具体规则引发的问题,但在实际工作中还需要综合考量更多方面的因素,如性能优化、安全性保障等方面的要求也应当得到足够的重视[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值