Spring Data Rest - _links

Edit 14/08/14 13:29

Meine nächste Schlussfolgerung ist, dass das von meinem @RepositoryRestResource CrudRepository erzeugte hal + json-Format falsch ist.

Das Tutorial (http://spring.io/guides/gs/accessing-data-rest/) zeigt die Ausgabe einer Hypermedia-Rest-JPA-Entität wie folgt an: (Bitte beachten Sie, dass es kein "rel" -Element gibt und "links" kein Array ist.)

{
   "_links" : {
       "people" : {
           "href" : "http://localhost:8080/people{?page,size,sort}"
       }
   }
 }

Die Referenzdokumente (http://docs.spring.io/spring-data/rest/docs/1.1.x/reference/html/intro-chapter.html) zeigen, dass die Ausgabe sein sollte:

{
    "links" : [ {
        "rel" : "customer",
        "href" : "http://localhost:8080/customer"
      }, {
         "rel" : "profile",
         "href" : "http://localhost:8080/profile"
      }
 }

Weiß jemand warum das so ist?

====================================

Edit 14/08/14: Ich habe mein Debugging einen Schritt weiterentwickelt. Indem ich meine eigene Implementierung einer org.springframework.hateoas.ResourceSupport-Klasse bereitstelle, die den JSON-Code auf "_links" und nicht auf "links" überprüft, komme ich einen Schritt weiter. Der Fehler ist:

"Instanz von java.util.ArrayList kann nicht über die Referenzkette aus dem START_OBJECT-Token deserialisiert werden: com.ebs.solas.admin.test.SolicitorDTO [\" _ links \ "]"

Dies liegt daran, dass die org.springframework.hateoas.ResourceSupport-Klasse anscheinend erfordert, dass das links-Attribut ein json-Array ist. Und standardmäßig erzeugt die von Spring Data für eine Rest-Entität erzeugte Ausgabe von json + hal kein Array (es gibt keine eckigen Klammern):

"_links" : {
  "self" : {
    "href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/Fxxx"
  },
  "solicitors" : {
    "href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/Fxxx/solicitor
  }
}

Hoffentlich kann mir hier jemand aus den Frühlingsforen weiterhelfen.

============================================

Bitte sehen Sie sich eine Übersicht meines Spring Data-Repository-Codes an:

@RepositoryRestResource
    public interface SolicitorFirmRepository extends CrudRepository<SolicitorFirm, String> {
}

@Entity
@RestResource
@Table(name="XXXX", schema = "XXX")
public class SolicitorFirm implements Serializable {
}

Dadurch wird die folgende Hassressource erfolgreich generiert:

{
"firmNumber" : "FXXXX",
"solicitorType" : "r",
"companyName" : "XXXX",
"address1" : "XXXX",
"address2" : "XXX",
"address3" : "XXX",
"address4" : null,
"phoneNumber" : "XXXXX",
"faxNumber" : "XXXXX",
"county" : "OY",
"_links" : {
    "self" : {
        "href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/XXXX"
    },
    "solicitors" : {
        "href" : "http://localhost:9090/solas-admin-data-api/solicitorFirms/XXXX/solicitors"
    }
 }

Wenn ich jedoch ein DTO für clientseitige / Controller-Verwendung definiere:

import org.springframework.hateoas.ResourceSupport;
public class SolicitorFirmDTO extends ResourceSupport {
   .....
}

und verwenden Sie den folgenden Code

RestTemplate rt = new RestTemplate();
String uri = new String("//xxxxx:9090/solas-admin-data-api/solicitors/Sxxxxx");
SolicitorFirmDTO u = rt.getForObject(uri, SolicitorFirmDTO.class, "SXXXX");

Ich erhalte folgenden Fehler:

com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Nicht erkanntes Feld "_links" (Klasse com.ebs.solas.admin.test.SolicitorFirmDTO), nicht als ignorierbar gekennzeichnet (7 bekannte Eigenschaften: xx])

Aus irgendeinem Grund fügt der von Spring Data Rest produzierte json die Entity-Links unter hinzu_links während die HATEOAS-Ressourcensuperklasse erwartetlinks?

Kann jemand helfen? Ist dies ein Versionsproblem oder benötige ich eine zusätzliche Konfiguration für die Zuordnung?_links zulinks

Ich habe versuchtMappingJackson2HttpMessageConverter und verschiedene Medientypenapplication/json+hal umsonst.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage