java - 将蛇案例转换为骆驼案例以进行 Spring 分页和排序
问题描述
休眠实体具有以驼峰命名的字段,但是当从该实体构造的 DTO 从 REST API 返回时,我们将字段名称转换为蛇形。
有一种通用方法可以将每个 DTO 字段转换为具有杰克逊配置的蛇形案例,如下所示
spring.jackson.property-naming-strategy: SNAKE_CASE
现在的问题是,例如,使用 Spring 分页和排序,如果我们想按参数排序,我们需要将参数作为骆驼案例而不是蛇案例传递。
例子:
实体看起来像这样:
@Data
@Entity
@Table
public class Entity {
@Id
@Column(name = "id", updatable = false, nullable = false)
@GeneratedValue(generator = "uuid")
@Access(AccessType.PROPERTY)
private UUID id;
@Column(name = "some_text")
private String someText;
}
DTO 看起来像这样:
@Data
public class EntityDTO implements Serializable {
private UUID id;
private String someText;
}
输出 JSON 如下:
{
"id": "80fb034a-36c1-4534-a39f-b344fa815a2d",
"some_text": "random text"
}
现在,如果我们想使用排序参数调用端点,例如:
/entities?sort=some_text&some_text.dir=desc
它不起作用,因为实体中的字段实际上是 someText 而不是 some_text 这很令人困惑,因为输出是蛇形而不是骆驼形。
所以一般的问题是如何处理这个问题?有没有聪明的方法来做到这一点?一些杰克逊配置或参数处理程序配置?还是我需要手动将每个蛇案例参数转换为骆驼案例?
提前谢谢你们。
解决方案
您在 application.properties 文件中使用以下属性将 Snake case 转换为 camel case。
spring.jackson.property-naming-strategy=SNAKE_CASE
或者,如果您只映射一个类,您可以如下注释属性。
@JsonProperty("some_text")
private String someText;
或如下注释实体
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
推荐阅读
- discord - 如何在 discord.py 重写中使用 wait_for
- python-3.x - Django 上的 MakeMigration 错误 - ImportError:无法从“django.db.models”导入名称“FieldDoesNotExist”
- django - Django:无法自动将用户 ID 插入其他表单
- python - 如何正确地将值分配给列表 python 中的列表?
- javascript - 如何在 React Native 中的 Alert 中添加 Lottie 动画
- swiftui - Clipped 实际上并不在 SwiftUI 中剪辑图像
- python - 我正在尝试将浮点数从元组分配给 numpy 数组
- javascript - 共享主机的MongoDB Atlas连接ip问题
- python - python mocks在'function'中找不到引用'assert_call_with'
- firebase - 如何从 Firebase 存储中获取图像 URL?