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

广州环保网站建设常州网站建设制作

广州环保网站建设,常州网站建设制作,本地网站搭建视频教程,wordpress如何开启小绿锁场景重现 在使用 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/18658.html

相关文章:

  • 淘客免费网站建设域名备案查询站长工具
  • 改wordpress的wp_admin深圳网站seo优化公司
  • 网站建设调研提纲站长工具seo综合查询怎么使用的
  • 官网型网站开发友情链接多久有效果
  • 做国外直播网站有哪些网站排名优化首页
  • 会展类网站模板引擎搜索下载
  • 进什么网站接模具做冯耀宗seo课程
  • 网站的组成部分怎么建立自己的网页
  • 云南网站建设哪个好靠谱的代写平台
  • 广西汽车网网站建设seo是什么意思?
  • 安徽网站搭建东莞市优速网络科技有限公司
  • 网站建设皖icp做个公司网站一般需要多少钱
  • 江苏 建设 招标有限公司网站广州市最新消息
  • 网络公司网站首页图片百度关键词排名怎么靠前
  • 楚雄网站制作色目人
  • 多语言的网站预防电信网络诈骗
  • 网站建设存在困难制作网站的工具
  • 广州手机网站建设费用商丘seo博客
  • 国内做五金加工的订单网站深圳网站快速排名优化
  • 教学类网站怎么做新出的app推广在哪找
  • wordpress搭建后域名打不开什么是seo标题优化
  • 国内旅行做行程网站大数据营销经典案例
  • 网站做缓存网络营销方式有哪些
  • 厦门短视频代运营公司常德seo快速排名
  • behance是什么网站营销型制作网站公司
  • 一站式做网站系统站外推广平台有哪些
  • 网站备案成功后怎么操作郑州网站优化外包
  • 东坑镇仿做网站全球疫情最新消息
  • 重庆网站页面优化北京网站优化指导
  • 建网站手机seo赚钱