Используйте те же REST-представления с использованием Graphaware Neo4j Framework, которые мы получаем от REST API Neo4j
Я занимаюсь разработкой серверного расширения Neo4j с использованием Neo4j Framework, предоставленного Graphaware.
Я хочу в своем ответе отправить следующий объект (упрощенный, чтобы вы могли видеть атрибуты):
public class DiffResult {
private Node fileOrFolder;
private Node originalContent;
private Path path;
}
Проблема в том, что объект Node не может быть визуализирован Джексоном. Я видел класс NodeRepresentation somewhare, но я также не знаю, как правильно использовать его с моим Spring MVC Controller.
Я хочу, чтобы мои узлы были сериализованы, как в Neo4j REST Api (см. Документацию: http://neo4j.com/docs/stable/rest-api-nodes.html)
Я также покажу вам используемый контроллер (также упрощенный).
@Controller
@RequestMapping("/diff")
public class FileSpaceDiffApi {
private final GraphDatabaseService database;
@Autowired
public FileSpaceDiffApi(GraphDatabaseService database) {
this.database = database;
}
@RequestMapping(method = RequestMethod.GET)
@ResponseBody
public List<DiffResult> diff(@QueryParam("fileSpaceId") Long fileSpaceId, @QueryParam("since") Long since) {
List<DiffResult> results = new ArrayList<DiffResult>();
Transaction tx = database.beginTx();
try {
Node startNode = database.getNodeById(fileSpaceId);
DiffResult diffResult = new DiffResult();
diffResult.setFileOrFolder(startNode);
results.add(diffResult);
tx.success();
}
finally {
tx.close();
}
return results;
}
}
В идеале я также хотел бы иметь возможность отображать путь в JSON.
1 ответ
Нет (пока) возможности легко возвращать узлы в том же формате, что и Neo4j. Это происходит главным образом потому, что REST API Neo4j очень универсален и, следовательно, слишком болтлив и многословен для многих вариантов использования.
Я бы предложил посмотреть на com.graphaware.api.JsonNode
к которому можно передать узел Neo4j и некоторую конфигурацию того, что будет присутствовать в сгенерированном JSON (например, включать ли метки и т. д.)
Вы можете использовать его, добавив следующее в ваш pom.xml:
<dependency>
<groupId>com.graphaware.neo4j</groupId>
<artifactId>api</artifactId>
<version>${graphaware.version}</version>
</dependency>
Что касается путей, есть JsonPath
заняться neo4j-алгоритмами, которые помогут вам добиться того, чего вы хотите. Мы с радостью перейдем к основному фреймворку для следующего релиза (именно там он и должен быть).