2015-11-04 3 views
5

я построил простой SDN4 + REST API:Добавить отношение к другому узлу в SDN4 + REST

Один конечной точки, названный игрок, который содержит набор свойств.

У каждого игрока есть Set<Player> friends.

GET, POST, PUT, DELETE и PATCH работают как шарм на/игрока/{ID}

Проблема здесь есть/игрок/{ID}/друзей.

Я не узнать, как добавить друга к игроку, вот что я пытался до сих пор:

  • Перед тестом:

curl http://localhost:8080/api/player/1/friends: { }

  • Тест

curl -i -X PATCH -H "Content-Type:application/json" -d '{"id":1, "name":"Player2", "password":"", "email":"[email protected]", "elo":1200}' http://localhost:8080/api/player/1/friends:

HTTP/1.1 204 No Content Server: Apache-Coyote/1.1 Date: Wed, 04 Nov 2015 13:03:17 GMT

  • После испытания:

curl http://localhost:8080/api/player/1/friends { }

также попытался с PUT, тот же результат.

Я тоже пытался с POST, но я получаю «метод не допускается».

Вот мой репозиторий:

@RepositoryRestResource(collectionResourceRel="player", path="player") 
public interface PlayerRepository extends PagingAndSortingRepository<Player, Long> { 

    Player findByid(@Param("0") long id); 
} 

И моя модель:

@NodeEntity 
public class Player { 

    @GraphId Long id; 

    String name; 

    String email; 

    @Transient 
    String password; 

    int elo; 

    @RelatedTo(type="FRIEND_WITH", direction = Direction.BOTH) 
    Set<Player> friends; 
} 

Я чувствую, что это просто тупая ошибка, но я не нашел, как это исправить.

EDIT:

Я попытался это: $addToSet implementation for array update on PATCH request

И вот результат:

curl -i -X PATCH -H "Content-Type:application/json-patch+json" -d '{"op": "add", "path": "/player/2", "value":["test"]}' http://localhost:8080/api/player/1/friends 
HTTP/1.1 415 Unsupported Media Type 
Server: Apache-Coyote/1.1 
Content-Type: application/json;charset=UTF-8 
Transfer-Encoding: chunked 
Date: Thu, 05 Nov 2015 11:40:31 GMT 

{ 
    "timestamp" : "2015-11-05T11:40:31.579+0000", 
    "status" : 415, 
    "error" : "Unsupported Media Type", 
    "exception" : "org.springframework.web.HttpMediaTypeNotSupportedException", 
    "message" : "Content type 'application/json-patch+json' not supported", 
    "path" : "/api/player/1/friends" 
} 

Вот мой pom.xml, на всякий случай:

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <groupId>org.afkgames</groupId> 
    <artifactId>api-rest-sdn</artifactId> 
    <version>0.1.0</version> 

    <parent> 
     <groupId>org.springframework.boot</groupId> 
     <artifactId>spring-boot-starter-parent</artifactId> 
     <version>1.2.7.RELEASE</version> 
    </parent> 

    <dependencies> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-data-rest</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.data</groupId> 
      <artifactId>spring-data-neo4j</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-validator</artifactId> 
     </dependency> 
    </dependencies> 
    <properties> 
     <java.version>1.8</java.version> 
     <start-class>api.Bootstrap</start-class> 
    </properties> 
    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

    <repositories> 
     <repository> 
      <id>spring-releases</id> 
      <url>https://repo.spring.io/libs-release</url> 
     </repository> 
     <repository> 
      <id>neo4j</id> 
      <name>Neo4j</name> 
      <url>http://m2.neo4j.org/</url> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>spring-releases</id> 
      <url>https://repo.spring.io/libs-release</url> 
     </pluginRepository> 
    </pluginRepositories> 

</project> 

ответ

2

Осмотрев всюду решение, я нашел его.

Вы можете добавить элемент в коллекции с помощью POST с Content-Type : text/uri-listтолько с пружинным стартером родителем 1.3.0+.

Вот пример с Скручиванием

curl -i -X POST -H 'Content-type: text/uri-list' -d 'localhost:8080/api/player/1' http://localhost:8080/api/player/0/friends 

Это добавляет игрок 1, как друг игрока 0.

Смежные вопросы