hibernate实体具有以驼峰大小写命名的字段,但是当从RESTAPI返回由该实体构造的DTO时,我们将字段名转换为snake大小写。
有一种通用方法可以将每个DTO字段转换为具有类似jackson配置的snake case
spring.jackson.property-naming-strategy: SNAKE_CASE
现在的问题是,例如,使用Spring分页和排序,如果我们想按参数排序,我们需要将参数作为camel case而不是snake case传递。
例子:
实体看起来像这样:
@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"
}
现在,如果我们想调用具有排序参数的endpoint,例如:
/entities?sort=some_text&some_text.dir=desc
它将不起作用,因为实体中的字段实际上是someText而不是someu text,这很容易混淆,因为输出是蛇形而不是驼峰形。
所以一般的问题是如何处理这个问题?有没有聪明的方法?某些jackson配置或参数处理程序配置?或者我需要手动将每个snake-case参数转换为camel-case吗?
提前谢谢你们。
下面我提供的解决方案将解决您的问题,而不需要定义每个DTO字段名称到其相应的DAO/实体字段名称的映射。它使用常量和方法的com.google.common.base.CaseFormat
类从谷歌番石榴库转换字符串在一个案例到另一个。我假设您正在从org.springframework.data.domain.Pagable
类的实例中提取分页和排序信息。
java prettyprint-override">public Page<Entity> getEntities(Pageable dtoPageable) {
PageRequest daoPageable = PageRequest.of(
dtoPageable.getPageNumber(),
dtoPageable.getPageSize(),
convertDtoSortToDaoSort(dtoPageable.getSort())
);
return entityRepository.findAll(daoPageable);
}
private Sort convertDtoSortToDaoSort(Sort dtoSort) {
return Sort.by(dtoSort.get()
.map(sortOrder -> sortOrder.withProperty(CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, sortOrder.getProperty())))
.collect(Collectors.toList())
);
}
您可以在应用程序中输入以下属性。属性文件,用于将蛇壳转换为驼峰壳。
spring.jackson.property-naming-strategy=SNAKE_CASE
或者,如果只映射单个类,则可以按如下所示对属性进行注释。
@JsonProperty("some_text")
private String someText;
或对实体进行如下注释
@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
我有一个简单的路线,看起来像这样: CXF 配置也非常简单: 此简单路由失败,出现以下异常 这是消息历史记录,表明它在
问题内容: 我看到可以将Docker映像转换为Vagrant框。 有没有一种方法可以将Vagrant框转换为Docker映像? 问题答案: 我在Github项目blacklabelops / centos中 使用EC2框和Virtualbox框重播了此内容。我已经准备了具有必要安装的Vagrantfile,您可以在Vagrant盒中尝试一下。 EC2盒: 使用https://github.com/
谁能告诉我如何将字符串转换snake_case: 到camelCase中的字符串为: 在Java? 提前谢谢你。
黑盒测试,白盒测试与灰盒测试的比较和区别如下所示: 编号 黑盒测试 白盒测试 灰盒测试 1 不需要了解内部工作结构(代码)。测试用例只需要GUI(图形用户界面)。 测试需要了解内部工作结构(软件编码)。 部分了解内部工作结构。 2 黑盒测试也称为功能测试,数据驱动测试和封闭盒测试。 白盒测试也称为结构测试,透明盒测试,基于代码的测试和透明测试。 灰盒测试也称为半透明测试,因为测试人员对编码知识有限
我试图用y轴和x轴对边界框进行排序,但我从tl()中找到的结果除外。x和tl()。y有点混乱,经过大量工作,我在文档中找不到任何东西。下面是一些结果,请看一看。我希望他们从1点到30点有序 代码: 编辑: 原始图片: