Преобразовать случай змеи в случай верблюда для весенней подкачки и сортировки - PullRequest
0 голосов
/ 10 января 2020

Спящие сущности имеют поля, названные в случае верблюда, но когда DTO, созданный из этой сущности, возвращается из REST API, мы преобразуем имя поля в случай змеи.

Существует универсальный c способ конвертировать каждое поле 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, что весьма запутанно, потому что вывод - в случае змеи, а не верблюда.

Итак, общий вопрос: как с этим бороться? Есть ли умный способ сделать это? Некоторая конфигурация Джексона или конфигурация обработчика аргументов? Или мне нужно вручную преобразовать каждый отдельный случай змеи в случай верблюда?

Заранее спасибо, ребята.


1 Ответ

0 голосов
/ 10 января 2020

указанное ниже свойство в файле application.properties для преобразования случая Змеи в случай верблюда.

spring.jackson.property-naming-strategy=SNAKE_CASE

Или вы можете аннотировать атрибуты, как показано ниже, если вы отображаете только один класс.

@JsonProperty("some_text")
private String someText;

ИЛИ аннотируйте объект, как показано ниже

@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...