2015-11-04 6 views
5

ho costruito un semplice SDN4 + REST API:Aggiungere relazione ad un altro nodo SDN4 + REST

un endpoint, di nome giocatore, che contiene un insieme di proprietà.

Ogni giocatore ha una proprietà Set<Player> friends.

GET, POST, PUT, DELETE e PATCH stanno lavorando come fascino su/lettore/{id}

Il problema qui è/lettore/{id}/amici.

non trovo il modo di aggiungere un amico a un giocatore, qui è quello che ho provato finora:

  • prima della prova:

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

  • Il test

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

  • Dopo il test:

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

provato anche con PUT, stesso risultato.

Ho provato anche con POST, ma ottengo un "metodo non consentito".

Ecco il mio repository:

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

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

E il mio modello:

@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; 
} 

Mi sento come se fosse un semplice errore stupido, ma non trovo come risolvere il problema.

EDIT:

ho provato questo: $addToSet implementation for array update on PATCH request

Ed ecco il risultato:

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" 
} 

Ecco il mio pom.xml, nel caso in cui:

<?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> 

risposta

2

Dopo aver cercato ovunque una soluzione, l'ho trovato.

È possibile aggiungere un elemento in una collezione utilizzando POST con Content-Type : text/uri-listsolo con molla-starter-genitore 1.3.0+.

Ecco un esempio con l'arricciatura:

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

Questo aggiunge il giocatore 1 come amico del giocatore 0.

Problemi correlati