Hibernate 实体的字段以驼峰式命名,但是当从 REST API 返回从该实体构造的 DTO 时,我们将字段名称转换为蛇形命名。
有一种通用方法可以使用 jackson 配置将每个 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,这很令人困惑,因为输出是蛇形大小写而不是驼峰大小写。
所以一般问题是如何处理这个问题?有聪明的方法吗?一些 jackson 配置或参数处理程序配置?或者我是否需要手动将每个蛇形参数转换为驼峰式参数?
先谢谢你们了。
<小时/>最佳答案
在 application.properties 文件中使用以下属性将蛇形大小写转换为驼峰大小写。
spring.jackson.property-naming-strategy=SNAKE_CASE
或者,如果您只映射一个类,您可以按如下方式注释属性。
@JsonProperty("some_text")
private String someText;
或按如下方式注释实体
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
关于java - 将蛇形大小写转换为驼峰大小写以进行 Spring 分页和排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59686634/