Как определить стратегию именования sniber_case Hibernate в проекте Spring Data Rest, используя стратегию именования свойств Джексона в качестве случая змеи - PullRequest
0 голосов
/ 05 апреля 2019

Что

Использование:

  • spring.jackson.property-naming-strategy: SNAKE_CASE
  • spring.jpa.hibernate.naming.physical-strategy: net.bugreport.domain.strategies.NamingStrategy (мою собственную стратегию вы можете проверить на GitHub )
  • spring-boot-starter-data-rest

Я сталкиваюсь с

JSON parse error: Cannot construct instance of `net.bugreport.domain.entities.SomethingCamelCase` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('/something_camel_cases/1'); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot construct instance of `net.bugreport.domain.entities.SomethingCamelCase` (although at least one Creator exists): no String-argument constructor/factory method to deserialize from String value ('/something_camel_cases/1')

Что я ожидаю, что смогу сделать следующее:

POST /something_containing_camel_cases
{
  "something_camel_case": "/something_camel_cases/1"
}

с именем @Entity в соответствии с соглашениями Java (camelCase)

Пока сделано

Я создал небольшой репозиторий GitHub, чтобы привести минимальный воспроизводимый пример: https://github.com/hypr2771/naming-strategy-issue.

Я проанализировал org.springframework.data.rest.webmvc.json.PersistentEntityJackson2Module.AssociationUriResolvingDeserializerModifier#updateBuilder, который отвечает за мою проблему:

Действительно, при получении com.fasterxml.jackson.databind.deser.SettableBeanProperty именем свойства является его имя JSON, которое snake_case.

В то время как при поиске org.springframework.data.mapping.model.BasicPersistentEntity#getPersistentProperty он не может найти его, поскольку в org.springframework.data.mapping.model.BasicPersistentEntity#propertyCache имя camelCase.

Код

Поскольку код довольно тяжелый, содержащий pom.xml, несколько классов и их репозитории, тестовый набор и @SpringBootApplication, стратегию именования и набор данных, я настроил репозиторий GitHub для его хранения.

Репозиторий на GitHub доступен здесь для любого, кто сможет раскошелиться и получить ошибку .

Вам просто нужно запустить net.bugreport.domain.repositories.SomethingContainingCamelCaseRepositoryTest#create контрольный пример.

...