java - 将蛇形大小写转换为驼峰大小写以进行 Spring 分页和排序

标签 java spring spring-boot jackson

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/

相关文章:

java - Spring boot webjars未生成,Http 406返回

java - 无法解析的日期 : "2018-08-02T14:24:40.040353"

java - 在 MainActivity 的 fragment 中显示 EditText 的值

java - 动态使用 Java String 和 ResultSet 对象

java - Java中使用字符串数组时出现空指针异常

java - 处理 Jackson 在 Spring 端点上抛出的多个异常

spring - JpaSpecificationExecutor 与 QueryDslPredicateExecutor

java - Spring 自动配置与显式 @Enable* 配置声明

Spring 启动自动配置。意外的行为

java - 如何在 ResponseEntity 中不返回空值?