Spring data neo4j rest projection возвращает null при использовании выражения SpEL для вложенного объекта
Рассмотрим следующий вывод:
Случай 1: при извлечении вложенного объекта из neo4j с использованием интерфейса neo4j данных Spring (проекция)
{
"name": "Dhoni",
"currentLocation": {
"city": {
"name": "qwerqwer",
"regionalState": {
"state": {
"name": "zxvcxzcvc"
}
}
}
}
}
Проекционный интерфейс:
public interface PersonProjection {//Root
String getName();
CurrentLocationProjection getCurrentLocation();
public interface CurrentLocationProjection { // has relationship Props
CityProjection getCity(); // target object in entity mapping
interface CityProjection {
String getName();
RegionalStateProjection getRegionalState();
interface RegionalStateProjection { // has relationship Props
StateProjection getState(); // target object in entity mapping
interface StateProjection {
String getName();
}
}
}
}
}
Случай 2: Когда я попытался сопоставить вложенные значения с 1-м уровнем с помощью SpEL, все работает нормально, как вы можете видеть ниже.
public interface PersonProjection {//Root
String getName();
CurrentLocationProjection getCurrentLocation();
public interface CurrentLocationProjection {
@Value("#{target.city.name}")
String getCityName();
@Value("#{target.city.regionalState.state.name}")
String getStateName();
}
}
выводит как:
{
"name": "Deva",
"currentLocation": {
"cityName": "qwerqwer",
"stateName": "zxvcxzcvc"
}
}
Случай 3: Проблема: Однако, когда я пытаюсь сопоставить вложенные значения с самим (корневым уровнем / корневым узлом) с помощью SpEL через @Value, как показано ниже:
public interface PersonProjection {
String getName();
@Value("#{target.currentLocation.city.name}")
String getCityName();
@Value("#{target.currentLocation.city.regionalState.name}")
String getStateName();
}
ожидаемый результат:
{
"name": "Dhoni",
"cityName": "qwerqwer",
"stateName": "zxvcxzcvc"
}
Но он выдает следующую ошибку, в которой указано, что currentLocation имеет значение null, как показано ниже: (но у него есть значение)
ПРЕДУПРЕЖДЕНИЕ 13600 --- [nio-8080-exec-6] .wsmsDefaultHandlerExceptionResolver: разрешено [org.springframework.http.converter.HttpMessageNotWritableException: не удалось записать JSON: EL1007E: свойство или поле 'city' не могут быть найдены по нулю; вложенное исключение - com.fasterxml.jackson.databind.JsonMappingException: EL1007E: свойство или поле 'city' не может быть найдено в null (через цепочку ссылок: com.sun.proxy.$Proxy162["currentLocation"])]
Я немного запутался, как это работает на 1-м уровне, а не на корневом уровне? может кто-нибудь указать мою ошибку / направить меня для достижения ожидаемого результата. Спасибо.
Примечание: SDN (Spring Data Neo4j) версии 6.1.2 для исх.
1 ответ
В Spring Data Neo4j была ошибка, связанная с языком Spring Expression, использующим связанные объекты, которые не являются частью проекции. https://github.com/spring-projects/spring-data-neo4j/issues/2325
тл;др; это решено в Spring Data Neo4j 6.1.3