Что
Использование:
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
контрольный пример.