当前位置: 首页 > wzjs >正文

酒类网站建设方案案深圳网络营销推广培训

酒类网站建设方案案,深圳网络营销推广培训,品牌建设计划书,凡客沙发官网场景重现 在使用 MyBatis/Mybatis-Plus 框架对 MySQL 操作时习惯了字段名小驼峰映射,然而在操作 Elasticsearch 时发现字段名没有小驼峰映射。 解决方法 1. 使用 ObjectMapper 手动转换: 这是最直接也最常用的方法。 在 Spring Boot 应用中使用 Object…

场景重现

在使用 MyBatis/Mybatis-Plus 框架对 MySQL 操作时习惯了字段名小驼峰映射,然而在操作 Elasticsearch 时发现字段名没有小驼峰映射。

解决方法

1. 使用 `ObjectMapper` 手动转换:
这是最直接也最常用的方法。 在 Spring Boot 应用中使用 `ObjectMapper` 将从 Elasticsearch 获取的数据进行转换,将下划线命名转换为小驼峰命名。

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.HashMap;
import java.util.Map;@Service
public class ElasticsearchService {@Autowiredprivate ObjectMapper objectMapper; // 通过 @Bean 配置 ObjectMapperpublic Map<String, Object> getDocument(String index, String id) {// 假设你已经有了从 Elasticsearch 获取文档的方法,这里是模拟Map<String, Object> document = new HashMap<>();document.put("first_name", "John");document.put("last_name", "Doe");// 将下划线命名转换为小驼峰命名ObjectMapper snakeCaseMapper = new ObjectMapper();snakeCaseMapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);ObjectMapper camelCaseMapper = new ObjectMapper();camelCaseMapper.setPropertyNamingStrategy(PropertyNamingStrategies.LOWER_CAMEL_CASE);try {String jsonString = snakeCaseMapper.writeValueAsString(document);return camelCaseMapper.readValue(jsonString, Map.class);} catch (Exception e) {// 处理异常e.printStackTrace();return null;}}
}

解释:
        • `ObjectMapper` 配置: 在 Spring Boot 应用中,你需要配置一个 `ObjectMapper` Bean。
        • `PropertyNamingStrategy`: 通过设置 `PropertyNamingStrategy`,`ObjectMapper` 可以自动将下划线命名转换为小驼峰命名。 这里先使用`snakeCaseMapper`读取,再使用`camelCaseMapper`写出。
        • 转换过程: 从 Elasticsearch 获取的数据(`Map`)使用 `ObjectMapper`序列化成 JSON 字符串,然后再反序列化成 `Map`。 在这个过程中,`PropertyNamingStrategy` 会自动进行命名转换。

配置 `ObjectMapper` Bean:

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
public class ObjectMapperConfig {@Beanpublic ObjectMapper objectMapper() {ObjectMapper objectMapper = new ObjectMapper();// 可以根据需要配置 ObjectMapper 的其他属性return objectMapper;}
}


2. 使用 Elasticsearch 的 `field_alias` (推荐但ES版本要支持):
从 Elasticsearch 7.0 开始,引入了 `field_alias`。 你可以利用这个功能,在 Elasticsearch 索引的 Mapping 中定义字段别名,将下划线命名的字段映射到小驼峰命名的字段。

PUT my_index
{"mappings": {"properties": {"first_name": {"type": "alias","path": "first_name"},"last_name": {"type": "alias","path": "last_name"}}}
}

注意: `field_alias` 只是别名,它仍然需要你存储实际的下划线命名的字段。 这样做的好处是,你可以在查询时使用小驼峰命名,但底层存储仍然是下划线命名。


3. 自定义 Elasticsearch 客户端 (不推荐):

你可以自定义 Elasticsearch 客户端,拦截响应结果,并手动进行字段命名转换。 这通常比较复杂,需要你深入了解 Elasticsearch 客户端的内部机制。不建议使用这种方法,因为它维护成本高。


4. 定义 DTO 类并使用 `@JsonProperty` 注解:

创建一个 DTO 类,对应 Elasticsearch 中的文档结构,并在 DTO 类的字段上使用 `@JsonProperty` 注解,将 Elasticsearch 的字段名映射到 DTO 类的字段上。

import com.fasterxml.jackson.annotation.JsonProperty;public class UserDTO {@JsonProperty("first_name")private String firstName;@JsonProperty("last_name")private String lastName;// Getters and setters
}

然后,从 Elasticsearch 获取数据后,将数据映射到 `UserDTO` 对象。


5. 使用 Elasticsearch 插件 (不推荐):

有一些第三方 Elasticsearch 插件可以自动进行字段命名转换。 但使用插件会增加系统的复杂性,并且可能存在兼容性问题,因此不建议使用。

选择哪种方法?

  • 优先考虑 field_alias (如果你的 Elasticsearch 版本支持): 它是最优雅的解决方案,对现有代码的改动最小。
  • ObjectMapper 手动转换: 如果你无法修改 Elasticsearch 的 Mapping,那么使用 ObjectMapper 是一个不错的选择。 它简单易用,并且可以灵活地控制转换过程。
  • @JsonProperty 注解: 如果你的数据结构相对固定,并且需要将其映射到 DTO 对象,那么使用 @JsonProperty 注解是一个好主意。
  • 避免自定义客户端和插件: 除非你有非常特殊的需求,否则不建议使用自定义客户端和插件,因为它们维护成本很高。
http://www.dtcms.com/wzjs/125640.html

相关文章:

  • 中山网站排名推广友情链接举例
  • 南阳做网站费用seo外包服务方案
  • 江门网站推广技巧服务怎样制作网页
  • 广东建设监理协会网站题库aso优化技巧
  • 南京网站定制南京免费b站软件推广网站
  • 让人做网站 需要准备什么推广网站模板
  • 佛山新网站建设代理商网络服务提供商
  • 网站建设与网页设计制作绿皮书seo推广论坛
  • 天河手机网站建设营销软文代写
  • 谷歌网站推广策略方案今日新闻头条内容
  • 长春网站建设首选网诚传媒_找小网站的关键词
  • 建设银行官方网站-云服务微信小程序开发教程
  • 旅游网站的后台管理系统怎么做网络营销推广难做吗
  • 谷歌做网站高清视频线转换线
  • 公司的企业邮箱怎么查询快速优化seo
  • 南昌做网站抖音关键词查询工具
  • 莆田做网站价格深圳百度竞价托管公司
  • 广州市专业做网站网站seo推广seo教程
  • 网上商城公司网站建设方案百度网站官网
  • 基于php的个人网站设计论文西安关键词优化排名
  • 代理公司注册的价格百度seo推广工具
  • 有域名了怎么做网站怎么让客户主动找你
  • 企业网站制作收费网站免费下载安装
  • 企业培训 电子商务网站建设 图片百度seo新站优化
  • 东凤镇做网站公司seo短期培训班
  • 中信银行网站怎么做的怎么烂优化网站排名技巧
  • 网站建设费用是什么科目小学生简短小新闻十条
  • 做网站的介绍国际最新消息
  • 接收新网站如何做诊断百度软件下载
  • 有哪些网站可以免费做推广的企业网络推广方法